更新:以前のバージョンは Azure で動作しませんでした。簡略化して以下に修正しました。(これを IIS Express の開発モードで動作させるには、Microsoft http://www.iis.net/downloads/microsoft/url-rewriteから URL Rewrite 2.0 をインストールする必要があります。これは WebPi インストーラーを使用します。最初に Visual Studio を閉じます)
私はそれと数日間格闘し、最終的に自分自身を転がしました。(完全な説明については、以下のリンクを参照してください) 基本的に、プロジェクトがビルドされるたびにアセンブリ バージョンを自動インクリメントし、更新を維持したい特定のリソースのルーティングされた静的ファイルにその番号を使用します。(そのため、something.js は something.v1234.js として含まれ、プロジェクトがビルドされるたびに 1234 が自動的に変更されます) - .min.js ファイルが本番環境で使用され、regular.js ファイルが使用されるようにするための追加機能もいくつか追加しました。デバッグ時 (縮小プロセスを自動化するために WebGrease を使用しています) このソリューションの優れた点の 1 つは、ローカル/開発モードと本番環境で機能することです。(私は Visual Studio 2015 / Net 4.6 を使用していますが、これは以前のバージョンでも機能すると思います。
実装するには、次の手順に従います: (これが古い投稿であることは知っていますが、ソリューションの開発中に遭遇しました):
方法: プロジェクトがビルドされるたびにアセンブリ バージョンを自動インクリメントし、更新を維持したい特定のリソースのルーティングされた静的ファイルにその番号を使用します。(そのため、something.js は something.v1234.js として含まれ、プロジェクトがビルドされるたびに 1234 が自動的に変更されます) - .min.js ファイルが本番環境で使用され、regular.js ファイルが使用されるようにするための追加機能もいくつか追加しました。デバッグ時 (縮小プロセスを自動化するために WebGrease を使用しています) このソリューションの優れた点の 1 つは、ローカル/開発モードと本番環境で機能することです。(私は Visual Studio 2015 / Net 4.6 を使用していますが、これは以前のバージョンでも機能すると思います。
手順 1:ビルド時にアセンブリで自動インクリメントを有効にする AssemblyInfo.cs ファイル (プロジェクトの "プロパティ" セクションの下にあります) で、次の行を変更します。
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
に
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
手順 2:バージョン スラッグが埋め込まれたファイルに対して、web.config で URL 書き換えを設定します (手順 3 を参照) 。
web.config (プロジェクトのメインのもの) で 、終了タグ <system.webServer>
の直後に置くセクションに次のルールを追加します。</httpProtocol>
<rewrite>
<rules>
<rule name="static-autoversion">
<match url="^(.*)([.]v[0-9]+)([.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
<rule name="static-autoversion-min">
<match url="^(.*)([.]v[0-9]+)([.]min[.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
</rules>
</rewrite>
手順 3:アプリケーション変数をセットアップして、現在のアセンブリ バージョンを読み取り、js および css ファイルにバージョン スラッグを作成します。
Global.asax.cs (プロジェクトのルートにあります) で、次のコードを protected void Application_Start() (Register 行の後) に追加します。
// setup application variables to write versions in razor (including .min extension when not debugging)
string addMin = ".min";
if (System.Diagnostics.Debugger.IsAttached) { addMin = ""; } // don't use minified files when executing locally
Application["JSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.','0') + addMin + ".js";
Application["CSSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.', '0') + addMin + ".css";
手順 4: Global.asax.cs で設定したアプリケーション変数を使用して、Razor ビューの src リンクを変更する
@HttpContext.Current.Application["CSSVer"]
@HttpContext.Current.Application["JSVer"]
たとえば、_Layout.cshtml の head セクションには、スタイルシート用に次のコード ブロックがあります。
<!-- Load all stylesheets -->
<link rel='stylesheet' href='https://fontastic.s3.amazonaws.com/8NNKTYdfdJLQS3D4kHqhLT/icons.css' />
<link rel='stylesheet' href='/Content/css/main-small.@HttpContext.Current.Application["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/medium.@HttpContext.Current.Application["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/large.@HttpContext.Current.Application["CSSVer"]' />
@RenderSection("PageCSS", required: false)
ここで注意すべき点がいくつかあります。1)ファイルに拡張子がありません。2) .min もありません。これらは両方とも、Global.asax.cs のコードによって処理されます。
同様に、(_Layout.csでも)私のjavascriptセクションで:次のコードがあります:
<script src="~/Scripts/all3bnd100.min.js" type="text/javascript"></script>
<script src="~/Scripts/ui.@HttpContext.Current.Application["JSVer"]" type="text/javascript"></script>
@RenderSection("scripts", required: false)
最初のファイルは、私が WebGrease で手動で作成したすべてのサードパーティ ライブラリのバンドルです。バンドル内のファイルを追加または変更した場合 (これはまれです)、手動でファイルの名前を all3bnd101.min.js、all3bnd102.min.js などに変更します... このファイルは書き換えハンドラと一致しないため、名前を手動で再バンドル/変更するまで、クライアント ブラウザにキャッシュされたままになります。
2 番目のファイルは ui.js (デバッグ モードで実行しているかどうかに応じて ui.v12345123.js または ui.v12345123.min.js として書き込まれます) これは処理/書き換えられます。(Global.asax.cs の Application_OnBeginRequest にブレークポイントを設定して、動作を確認できます)
これに関する詳細な説明: Simplified Auto-Versioning of Javascript / CSS in ASP.NET MVC 5 to stop caching issues (Azure および Locally で動作) URL Rewrite の有無にかかわらず (URL Rewrite なしで行う方法を含む)