【问题标题】:ASP.Net MVC JS/CSS bundling not working when deployedASP.Net MVC JS/CSS 捆绑在部署时不起作用
【发布时间】:2012-03-23 04:17:48
【问题描述】:

我部署了一个用 ASP.Net MVC 4 编写的小型 Web 应用程序。我们的 JS/CSS 包设置正确,它们在本地运行良好。问题是当我部署到 IIS 6 服务器时,捆绑包似乎不起作用。 js/css 没有下载,当我尝试转到脚本中的 js 链接时,我得到一个 404。

是否有人将 MVC 4 部署到 IIS 6 并完成了这项工作?

【问题讨论】:

  • 我想这将是一个路由问题,我相信您必须更改路由设置才能在 IIS6 上运行 MVC,但恐怕我手头没有详细信息:(

标签: asp.net-mvc-4 asp.net-optimization


【解决方案1】:

问题是我们在为 ASP.Net 2.0 配置的默认网站下作为为 ASP.Net 4.0 配置的虚拟目录运行。

我们创建了一个新网站并将其设置为 asp.net 4.0,一切正常。根据Haacked 上的这篇文章,无扩展网址现在应该适用于大多数 IIS 6 实例。

【讨论】:

    【解决方案2】:

    捆绑包通过无扩展网址提供,例如:

    IIS 6 不支持开箱即用的无扩展 URL。当它遇到以/js/css 结尾的url 时,它完全不知道它必须将此url 与aspnet_isapi.dll 处理程序(ASP.NET)相关联。

    您可以阅读 Phil Haack 的 blog post,他在其中解释了如何为 ASP.NET MVC 配置 IIS 6 以启用无扩展 url。它是关于 ASP.NET MVC 3 的,但对于 ASP.NET MVC 4 来说也是如此。

    哦,您可能会考虑升级到 IIS 7.0+,它在集成管道模式下运行时默认具有此功能。

    【讨论】:

    • 该链接假定您有一个像 .axd 这样的扩展名,它是 url 的一部分。捆绑包确实是无扩展的,但他所说的不起作用。我们已经有一个通配符映射设置,它也没有帮助。
    • @ShaneCourtrille,不幸的是,目前我无法访问 IIS 6 框来测试这一点,但我认为通过正确配置无扩展 url,您将能够实现这一点。也许您可以尝试在 serverfault.com 上提问,因为您的问题似乎与服务器配置相关,而不是编程。
    • 不,不幸的是,没有扩展对我也不起作用。我也没有找到解决方案。
    • 我把这个搞砸了一段时间,最后,我恢复了老式的方式......直到我们在工作中升级到 IIS 7!
    【解决方案3】:

    我的问题出在 App_Start 的 BundleConfig.cs 文件中。我的 BindleConfig.cs 文件以前看起来像以下

      bundles.Add(new ScriptBundle("~/Scripts/ui-js").Include(
                                         "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                         , "~/Scripts/ui-js/bootstrap.min.js"
                                         , "~/Scripts/ui-js/bootstrap-slider.js"
                                         , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                         , "~/Scripts/ui-js/common-script.js"
                                         , "~/Scripts/ui-js/html5.js"
                                         , "~/Scripts/ui-js/jquery.colorbox.js"
                                         , "~/Scripts/ui-js/respond.src.js"
                                         , "~/Scripts/ui-js/angular.min.js"
                                         , "~/Scripts/ui-js/bootstrap.js"
                                         ,"~/Scripts/ui-js/jRate.min.js"
                                         , "~/Scripts/ui-js/jcrop.min.js"
                                         ));
    

    我的布局页面有

    @Scripts.Render("~/Scripts/ui-js")
    

    谷歌搜索后我找到了解决方案,因为您不能为 new ScriptBundle() 虚拟路径使用相同的文件夹结构。

    所以我把上面改成了这个

    bundles.Add(new ScriptBundle("~/Scripts/ppScript").Include(
                                         "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                         , "~/Scripts/ui-js/bootstrap.min.js"
                                         , "~/Scripts/ui-js/bootstrap-slider.js"
                                         , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                         , "~/Scripts/ui-js/common-script.js"
                                         , "~/Scripts/ui-js/html5.js"
                                         , "~/Scripts/ui-js/jquery.colorbox.js"
                                         , "~/Scripts/ui-js/respond.src.js"
                                         , "~/Scripts/ui-js/angular.min.js"
                                         , "~/Scripts/ui-js/bootstrap.js"
                                         ,"~/Scripts/ui-js/jRate.min.js"
                                         , "~/Scripts/ui-js/jcrop.min.js"
                                         ));
    

    在我的布局页面中,我将其称为

    @Scripts.Render("~/Scripts/uiScript")
    

    注意:你也需要对你的 CSS 和 modernizr 包做同样的事情:)

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多