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 と互換性がないため、それにも問題がある場合、この修正は機能しません。

奇妙なことに、x86 で構築された .NET 4.0 をターゲットとするサンプル MVC 4 サンプル インターネット アプリは、問題のサーバーで 4.0 だけで正常に動作します。web.config は、unity、logging、elmah、ドットレスの構成を除いてまったく同じです。

これについての助けは大歓迎です。

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 ビット サーバーで動作します。問題のサーバーは標準版です。VM を再構築して、問題が解決するかどうかを確認します。
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 を返していましたバンドルの URL。ホットフィックス 980368 をインストールすると、バンドルが機能し始めました。

于 2014-02-10T21:21:15.307 に答える
0

問題は、そのサーバーに使用していた VM 上の .NET 4.0 インストールにあるようです。クリーンな .NET 4.0 インストールで 2 つの新しい VM (両方とも Windows 2008 64 ビット、1 つの標準 1 つのエンタープライズ) を作成した後、バンドルは両方で正常に機能しました。すべての助けをありがとう。

于 2013-02-25T16:20:28.910 に答える