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が表示され続け、縮小されたファイルのコンテンツは更新されません。古いコンテンツを含むバンドルを使用するのは役に立たないため、バンドルを更新するにはどうすればよいですか?私はあらゆる方法を試しましたが、解決策を見つけることができませんでした。
前もって感謝します!
まったく同じ問題がありました。 2つの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
を更新すると、実際にバンドルが更新されます...奇妙ですが、少なくとも予測可能です。
バンドルキャッシュの更新の原因を突き止めるために戦った後、私は他の人を助けることを願ういくつかの結論に達しました。
さて、これが私の話です。 Web Essentialsでより少ないファイルの最小ファイルの生成を無効にしました。古い最小ファイルは削除されず、バンドルされたものは更新されたCSSの代わりにそれらを見ました。幸運を!
[〜#〜] edit [〜#〜]
しばらくして、同じ問題にさらに2時間費やしました。今回は私のせいだったと思う-主要なチルダを忘れた、つまり
Scripts.Render("/js/script")
代わりに
Scripts.Render("~/js/script")
なんらかの理由で、時には機能し、時にはそのようなことをしませんでした。
バンドリング操作では、大文字と小文字が区別されます。ファイル名の大文字と小文字が適切であることを確認してください。
BundleConfig.csの行を変更する必要がありました。
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/Site.css")); <-- Uppercased.
実際、このタスクに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上のすべてのファイルを縮小しています。
現在の機能がCDNであることを実際にサポートするかどうかはわかりません。ブラウザーのキャッシュを防ぐためにハッシュコードを含むことを暗黙的にURLに依存しているためです。
しかし、私はあなたがそこに到達しようとするのを手伝うことができます、そしておそらく今日可能です...潜在的な障害の可能性がある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>
NuGetでSystem.Web.Optimizationを更新するだけです
同様の問題がありました。私の状況では、スタイルバンドルで参照されているCSSファイルがあり、MVCビューでそのバンドルが参照されていました。また、バンドルコードで「EnableOptimizations」フラグをfalseに設定しました。
これらすべてにもかかわらず、ビューは新しいCSSファイルを含めるための更新を拒否しました。
私の解決策は、CSSファイルの縮小バージョンを作成し、プロジェクトに含めることで、機能し始めました。縮小されたファイルはどこでも参照されないため(ビューが更新された後でも)、コードが最適化されないように設定されているため、考慮されるべきではないので、なぜこれが当てはまるのか分かりません。これはおそらく、バンドル機能のバグ(または機能)です。これが他の誰かがこの問題に遭遇するのを助けることを願っています。
私はこの答えを見ましたが、これらのどれも私には当てはまりませんでした。 CSSファイルに変更を加えた場合でも、スタイルバンドラーを失敗させていた特定のCSSルールがあり、同じハッシュを取得していました。以前はすべて正常に機能していました。
私の場合、違反しているcssセレクタールールは-
#globalSearch.searching { ... }
これを作ったら
.searching { ... }
すべてが再び動作を開始し、cssファイルに加えた変更によりバンドラーハッシュが正しく変更されます。誰かを助けるかもしれないので、この答えを追加するだけです。
私にとっての問題は、Fiddlerを実行していたことです。 DITを閉じてソリューションを再構築した後、jsファイルの変更が読み込まれました。
それが価値があることについては、私はちょうど1つのjsファイルが何であれ更新することを不可解に拒否するという同じ問題を抱えていました(再構築、強制キャッシュクリアなど)。しばらくして、クライアントデバッグツールをIE on(F12)で切り替えてネットワークトラフィックの監視を開始し、この行為だけでJSファイルが更新されました。
これが更新されてからしばらく経っていますが、バンドルがcssの変更に追いつくまで数秒待つ必要があることがわかりました。 bootstrap以下のファイルがcssとmin.cssにコンパイルされており、私の変更を確認するのは間違いなくすぐではありません。マイルはシステムの仕様によって異なる場合があります。