74

ASP.NET MVC 4 アプリケーションで ASP.NET バンドルを試しています。状況は、このタイプのアドレスを使用して他のサイトからアドレス指定できる JS および CSS ファイルを含む CDN スタイルのサービスを作成したいということです: http://www.mycdn.com/scripts/plugin/js、バンドル含まれているすべての .js ファイルを縮小します。

1 つのファイルのバンドル構成は次のようになります。

bundles.Add(new ScriptBundle("~/Scripts/plugin/pluginjs").Include("~/Scripts/plugin/jquery.plugin.js"));

ただし、これを行うと、元の js ファイルを変更した後でもバンドルが更新されません。ブラウザを更新すると、304 Not Modified が表示され続け、縮小されたファイルの内容が更新されません。古いコンテンツのバンドルは役に立たないので、どうすればバンドルを更新できますか? あらゆる方法を試しましたが、解決策がわかりませんでした。

前もって感謝します!

4

15 に答える 15

86

私はまったく同じ問題を抱えていました。2つのCSSファイルを含むフォルダーがあります。

  • 〜/ Content / main.css
  • 〜/ Content / main.min.css(以前の手動縮小プロセスからの既存)

私のバンドルコードはこれです:

bundles.Add(new StyleBundle("~/css/main").Include("~/content/main.css"));

どれだけ変更してmain.cssも、出力は同じURLで同じ内容でした。

<link href="/css/main?v=6Xf_QaUMSlzHbXralZP7Msq1EiLTd7g1vId6Vcy8NJM1" rel="stylesheet"/>

バンドルを更新する唯一の方法は、ソリューションを再構築することでした。明らかに最善のアプローチではありません。

ただし、削除するとすぐにmain.min.css、すべてが正常に機能し始めました。もう少し遊んでみるmain.cssと、との両方がある場合main.min.css、更新するmain.min.cssと実際にバンドルが更新されることがわかりました...奇妙ですが、少なくとも予測可能です。

于 2012-11-07T07:58:45.687 に答える
11

Google Chrome を使用している場合、キャッシュは非常に積極的であることに注意してください。何もキャッシュされないようCtrl-Shift-Iにするために、開発者ペインを表示することができます。に移動しNetworkてクリックしますDisable Cache。これを開いたままにしておいてください。ページを更新します。キャッシュがクリアされ、ファイルの変更が反映されます。

Google Chrome でキャッシュを無効にする

于 2017-01-04T20:26:59.713 に答える
9

さて、これが私の話です。Web Essentials でより少ないファイルの最小ファイルの生成を無効にしました。古い最小ファイルは削除されませんでした。バンドルは、更新された CSS の代わりにそれらを認識しました。幸運を!

編集

しばらくして、同じ問題にさらに 2 時間費やしました。今回は私のせいだと思います-先頭のチルダを忘れました、つまり私は書きました

Scripts.Render("/js/script")

代わりに

Scripts.Render("~/js/script")

何らかの理由で、それが機能することもあれば、そうでないこともありました。

于 2013-06-27T12:18:58.663 に答える
3

実際には、このタスクには System.Web.Optimization を使用しないことにしましたが、MVC4 System.Web.Optimization ライブラリに付属する WebGrease.dll にも含まれている Microsoft Ajax Minifier を見つけました。次の関数を作成し、縮小されたファイルごとに Application_Start で呼び出しました。

    public static void MinifyFile(string virtualPath)
    {
        string fullPath = HttpContext.Current.Server.MapPath(virtualPath);
        string extension = Path.GetExtension(fullPath).ToLower();
        string targetPath = fullPath.Substring(0, fullPath.Length - extension.Length) + ".min" + extension;
        if(File.Exists(fullPath) == false) 
        {
            throw new FileNotFoundException("File not found: " + fullPath);
        }
        string input = File.ReadAllText(fullPath);
        string output;
        if (extension == ".js")
        {
            Microsoft.Ajax.Utilities.Minifier jsmin = new Microsoft.Ajax.Utilities.Minifier();
            output = jsmin.MinifyJavaScript(input);
        }
        else if (extension == ".css")
        {
            Microsoft.Ajax.Utilities.Minifier jsmin = new Microsoft.Ajax.Utilities.Minifier();
            output = jsmin.MinifyStyleSheet(input);                
        }
        else
        {
            throw new NotSupportedException(extension + " is not supported for minification.");
        }
        File.WriteAllText(targetPath, output);
    }

現在、私のアプリケーションは Application_Start のすべてのファイルを縮小しています。

于 2012-08-29T07:57:57.343 に答える
1

ブラウザーのキャッシュを防ぐためにハッシュコードを含む URL に暗黙的に依存しているため、現在の機能が実際に CDN をサポートするかどうかはわかりません。

しかし、私はあなたがそこにたどり着くのを手伝うことができます。おそらく今日可能です...潜在的に障害となる可能性のある問題の 1 つは、IfLastModified ヘッダーを含むバンドル要求で BundleHandler が 304 を返すことです。 URL のフィンガープリントにより、ブラウザのキャッシュは常に有効です。

バンドルへの参照をどのようにレンダリングしているかについて、詳細を追加できますか? Scripts.Render("~/Scripts/plugin/pluginjs") のようなものを使用していますか?

バンドル スクリプト タグは次のようになります。

Good: <script src="/fbt/bundles/js?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"></script>

スクリプト タグがバージョン文字列のない未加工のバンドルを参照している場合は、発生しているキャッシュの問題を説明している可能性があります。

Not good: <script src="/fbt/bundles/js></script>
于 2012-08-28T20:22:05.017 に答える
0

これが更新されてからしばらく経ちましたが、バンドルがcssの変更に追いつくまで数秒待つ必要があることがわかりました。ブートストラップの少ないファイルをcssとmin.cssにコンパイルしていますが、変更をすぐに確認することはできません。私にとっては、SSDを搭載した高速PCで約10秒でした。マイルは、システムの仕様によって異なる場合があります。

于 2013-02-27T16:19:52.453 に答える
0

私にとっての問題は、Fiddler を実行していたことです。ditを閉じてソリューションを再構築した後、jsファイルの変更をロードしていました。

于 2016-12-29T21:28:31.330 に答える
0

NuGet で System.Web.Optimization を更新するだけです ここに画像の説明を入力

ここに画像の説明を入力

于 2015-01-04T23:54:33.860 に答える
0

この回答を見ましたが、どれも私には当てはまりませんでした。スタイルバンドラーを失敗させる特定の CSS ルールがあり、CSS ファイルに変更を加えた場合でも、同じハッシュを取得していました。以前はすべて正しく機能していました。

私の場合、違反しているcssセレクタールールは-

#globalSearch.searching { ... }

これだけ作ったら

.searching { ... }

すべてが再び機能し始め、css ファイルに変更を加えると、バンドラー ハッシュが正しく変更されます。誰かを助けるかもしれないので、この答えを追加するだけです。

于 2014-04-16T17:23:55.973 に答える