0

我正在使用 ASP.Net MVC,我的包看起来像:

        bundles.Add(new Bundle("~/bundles/rgmpjsbundle").Include(
            "~/Scripts/jquery-{version}.js",
            "~/Scripts/jquery-ui-{version}.js",
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*",
            "~/Scripts/modernizr-*",
            "~/Scripts/jquery.address-1.5.js",
            "~/Scripts/tabmenu.js",
            "~/Scripts/knockout-2.2.0.js",
            "~/Scripts/knockout.mapping-latest.js",
            "~/Scripts/jquery-ui-1.10.3.custom.js",
            "~/Scripts/KnockoutCustomBindings.js",
            "~/Scripts/knockout-sortable*",
            "~/Scripts/moment.js"));

这是相当标准的。当我在开发区域部署我的应用程序时,问题就来了。IIS 的设置如下(我知道这不是很好):

DEVWEBSITE
   ->  app 1
   ->  app 2
   ->  app 3
UATWEBSITE
   ->  app 1
   ->  app 2
   ->  app 3

然而; 生产设置不同,因为每个应用程序都有自己的网站。事实证明这对我来说是一个正确的痛苦,因为在 DEV/UAT 结构下,我的应用程序将使用 ~ 一直跳回 DEV/UAT 网站(Shell 网站),但在 PROD 环境中它会回到Web 应用程序的根目录。我会使用相对引用,除非我使用 MVC URL 重写。

有没有人可以解决这个问题?也许 IIS7 上的一些设置可以捕捉〜引用?

4

1 回答 1

0

您可以尝试创建一个像 @html.getMyPath() 这样的帮助程序,并在您的网络配置中创建一个密钥,其中包含不同的环境配置 (开发、UAT 生产),该密钥应该包含类似 key="pathToFolder" value="/" 或 " ~/" 然后在您的应用启动时将该配置加载到缓存中。

助手将读取参数并找到文件路径的解析。

其他解决方案可能是,对于每个环境,您可以设置不同的“根位置”并使用 server.mappath 来确定每个环境的文件的物理位置,这个实现也应该在 html 帮助器中。

我希望这会有所帮助

于 2013-08-14T20:25:16.567 回答