7

我们最近将我们的项目从 MVC 3 升级到了 MVC 4。我们的目标是 .NET 4.0 框架,并且我们的 Web 应用程序是 32 位的,因为我们必须包含一些参考。

我们遇到的问题是我们将捆绑/缩小从 Chirpy 转换为内置的 ASP.NET 捆绑。该站点在 32 位服务器(仅运行 .NET 4.0 的 Windows Server 2003/IIS 6 和 2008/IIS 7.5 以及我们的 64 位开发机器)上运行没有问题。捆绑/缩小在上述所有方面都可以正常工作。

在仅安装 .NET 4.0 的 64 位 Windows 2008 / IIS 7.5 服务器上,捆绑不起作用。生成的脚本和样式都会出现 404 错误。

如果我们在 64 位服务器上安装 .NET 4.5,它可以正常工作。我们对此感到困惑,因为有些服务器在没有 .NET 4.5 的情况下工作,而这个需要它。最重要的是,Windows Server 2003 / 64 位与 .NET 4.5 不兼容,因此如果这也有问题,此修复程序将不起作用。

奇怪的是,针对 .NET 4.0 构建的 x86 的示例 MVC 4 示例 Internet 应用程序在问题服务器上仅使用 4.0 即可正常工作。除了统一、日志记录、elmah 和无点配置之外,web.config 完全相同。

对此的任何帮助将不胜感激。

这是 BundleConfig.cs:

using System.Web;
using System.Web.Optimization;

namespace WebApp
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.UseCdn = false;

            // .debug.js, -vsdoc.js and .intellisense.js files 
            // are in BundleTable.Bundles.IgnoreList by default.
            // Clear out the list and add back the ones we want to ignore.
            // Don't add back .debug.js.
            bundles.IgnoreList.Clear();
            bundles.IgnoreList.Ignore("*-vsdoc.js");
            bundles.IgnoreList.Ignore("*intellisense.js");

            bundles.Add((new ScriptBundle("~/bundles/WebApp.Register1")).Include("~/Scripts/jquery.ba-tinypubsub.min.js",       
                                                                                 "~/Scripts/knockout-2.1.0.js",
                                                                                 "~/Scripts/WebApp/WebApp.Register.RegisterStudent.js",
                                                                                 "~/Scripts/WebApp/WebApp.Register.RegisterPresenter.js"));

            bundles.Add((new Bundle("~/bundles/WebApp.Register2")).Include("~/Scripts/WebApp/WebApp.Register.StudentSelect.js"));


            bundles.Add((new ScriptBundle("~/bundles/WebApp.View1")).Include("~/Scripts/jquery.ba-tinypubsub.min.js",
                                                                             "~/Scripts/WebApp/WebApp.View.ImagePresenter.js", 
                                                                             "~/Scripts/WebApp/WebApp.View.ImageResults.js"));

            bundles.Add((new Bundle("~/bundles/WebApp.View2")).Include("~/Scripts/WebApp/WebApp.View.StudentsSelect.js"));

            bundles.Add((new ScriptBundle("~/bundles/WebApp.Print1")).Include("~/Scripts/WebApp/WebApp.Print.SelectedIdArray.js",
                                                                              "~/Scripts/jquery.ba-tinypubsub.min.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.DocumentsSelect.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.DocumentsSelected.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.DocumentsPresenter.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.StudentsPresenter.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.PrinterSelected.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.OutputSummary.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.OutputPresenter.js",
                                                                              "~/Scripts/WebApp/WebApp.Print.NoStudentPresenter.js"));

            bundles.Add((new Bundle("~/bundles/WebApp.Print2")).Include("~/Scripts/WebApp/WebApp.Print.StudentsSelect.js",
                                                                        "~/Scripts/WebApp/WebApp.Print.StudentsSelected.js"));

            bundles.Add((new ScriptBundle("~/bundles/WebApp.Main")).Include("~/Scripts/modernizr.custom.33607.js", 
                                                                            "~/Scripts/jquery-1.6.1.js",
                                                                            "~/Scripts/jquery-ui-1.8.10.custom.min.js",
                                                                            "~/Scripts/jquery-ui.min.js", 
                                                                            "~/Scripts/json.js",
                                                                            "~/Scripts/jquery.validate.min.js", 
                                                                            "~/Scripts/jquery.marquee.js",
                                                                            "~/Scripts/YUI.js", 
                                                                            "~/Scripts/Common.SearchHighlight.js"));

            bundles.Add((new StyleBundle("~/bundles/Content/WebApp.Main")).Include("~/Content/jquery.marquee.min.css",
                                                                                      "~/Content/YUI.css", 
                                                                                      "~/Content/Site.css",
                                                                                      "~/Content/ui-lightness/jquery-ui-1.8.10.custom.css"));
        }
    }
}

以下是我们在布局中引用捆绑包的方式:

    @Scripts.Render("~/bundles/WebApp.Main")
    <link href="@Url.Content("~/Content/SiteLess.less")" rel="stylesheet" type="text/css"  />
    @Styles.Render("~/bundles/Content/WebApp.Main")
    ...

编辑:响应/更新

  • 是的,已启用 32 位应用程序标志在应用程序池中设置为 True。
  • 给出 404 的请求的路径如下所示http://xx.xx.xx.xxx/WebApp/bundles/WebApp.Main?v=03pBc7hdH1lHLtZGx-JMosNaLpMK7fcmI0uI6auknHw1
  • Windows 事件查看器不显示任何内容
  • 它在安装 .NET 4.5,卸载它,然后重新安装 .NET 4.0 后工作
  • 它适用于企业 2008 64 位服务器。问题服务器是标准版。我们将重建虚拟机,看看是否能解决问题。
4

2 回答 2

2

您最初遇到 404 问题的环境可能没有应用无扩展名 URL 修补程序。

请参阅http://support.microsoft.com/kb/980368

巧合的是,您的“干净的 .NET 4.0”安装要么是 4.0 之后的版本(可能是 4.5?),要么您可能在不知不觉中应用了修补程序/更新以启用对无扩展 URL 的支持。

我在 Windows Server 2008 机器(企业版;32 位和 64 位)中遇到了同样的问题,其中捆绑器在运行时没有失败(它正确地创建了捆绑包,并正确呈现了捆绑包 URL,例如/app/bundles/my_script),但 IIS 返回 404捆绑网址。我安装了修补程序 980368,并且捆绑包开始工作。

于 2014-02-10T21:21:15.307 回答
0

问题似乎与我们用于该服务器的 VM 上的 .NET 4.0 安装有关。在创建两个安装了干净的 .NET 4.0 的新 VM(均为 Windows 2008 64 位,一个标准一个企业)后,捆绑在两者上都运行良好。感谢所有的帮助。

于 2013-02-25T16:20:28.910 回答