4

ASP.NET 4.5 バンドル機能で、デバッグモードでの実行時にクエリ文字列の一部として GUID を生成する方法はありますか(たとえば、バンドルをオフにします)。

問題は、ローカルで開発する場合、スクリプト/CSS ファイルが次のように生成されることです。

<script type="text/javascript" src="/Content/Scripts/myscript.js" />

したがって、そのファイルを変更した場合、ブラウザがファイルを取得できるようにハード リフレッシュを (場合によっては数回) 行う必要があります。面倒です。

次のようにレンダリングする方法はありますか?

<script type="text/javascript" src="/Content/Scripts/myscript.js?v=x" />

GUID はどこxにありますか (例: 常に一意)。

アイデア?

ASP.NET MVC 4 を使用しています。

4

3 に答える 3

4

上記の他の回答に従ってNuGetパッケージにパッチが適用されるまで、今のところ、ベータNuGetパッケージで行ったのと同じラッパーコードを使用することになりました。

private static IHtmlString JsUnbundled(this HtmlHelper htmlHelper, string bundlePath)
{
    var jsBuilder = new StringBuilder();
    foreach (var file in BundleResolver.Current.GetBundleContents(bundlePath))
    {
        var tagBuilder = new TagBuilder("script");
        tagBuilder.Attributes["src"] = file.AddCacheKey(); // add GUID
        tagBuilder.Attributes["type"] = "text/javascript";
        jsBuilder.AppendLine(tagBuilder.ToString());
    }
    return MvcHtmlString.Create(jsBuilder.ToString());
}

次に、デバッグかどうかをチェックし、上記を使用する別の HTML ヘルパーがありますScripts.Render

明らかに、これはファイルのいかなる種類のハッシュも行いません-常にファイルを要求します。しかし、これはデバッグ専用なので気にしません。

于 2012-10-31T00:03:19.390 に答える
1

現在、デバッグ モードでファイルの内容を調べていませんが、この機能を追加することはできます。

codeplex hereの問題として提出しました。

于 2012-10-30T16:58:40.097 に答える
0

HashCache を試す: https://github.com/kemmis/System.Web.Optimization.HashCache

すべてのバンドルがコレクションに追加された後、BundlesCollection インスタンスで ApplyHashCache() 拡張メソッドを実行します。

BundleTable.Bundles.ApplyHashCache();

これにより、デバッグ モードでスクリプト/スタイル タグの出力にコンテンツ ハッシュが追加されます。

于 2015-01-11T20:50:21.073 に答える