14

ASP.NET MVC 3 Web アプリケーションで新しい ASP.NET バンドル機能 (System.Web.Optmization 1.0.0-beta プレリリースを使用) をいじっています。

よく働く。

ただし、データベースに保存されている特定の動的CSS/JS があります。

「DynamicBundle」など、コア バンドルの別のバンドルにこれを追加したいと考えています。私はそれを行う方法を知っていますが、問題ではありません。

私の質問は、この CSS/JS がデータベースで変更された場合、そのバンドルを「更新」して、それらのファイルの内容をバンドルに再読み込みする必要があるということです。

基本的に、バンドル URL に追加される魔法の GUID/文字列を再生成するには、ASP.NET が必要です。

理想的には、バンドル テーブル全体ではなく、特定のバンドルのみを更新したいと考えています。

これを行う方法はありますか?

編集:

2 つ目の問題は、動的 CSS/JS をバンドルに追加する方法がわかりません。bundle.AddFileファイルへの仮想パスを取りますが、これは物理ファイルではなく文字列です。どうすればいいですか?確かに、最初に文字列をファイルに書き出す必要はありませんか?

EDIT 2: 動的コンテンツをバンドルしないことにしました。2 つの理由から:

  1. 1ファイルのみなので、「バンドル」のメリットはありません
  2. バンドルは静的コンテンツ用に設計されていますが、これはそうではありません

だから私がやったことは、実行時に動的なcss / jsを手動で縮小することです(一度、次にキャッシュされます)。そうすれば、キャッシュをクリアするだけで簡単に更新できます。

そうは言っても、これはまだ関連する質問です(バンドルの更新)ので、開いたままにします..

4

2 に答える 2

5

その「その魔法のGUID /文字列」は、結合されたファイルの内容のハッシュです。

これは、次のワークフローを使用してテストできますmybundle.css。Fiddler を使用してトラフィックを監視すると、次のようなハッシュで何かを要求することがわかります。

http://localhost:20206/mybundle.css?v=-6520265193368900210

ここで、実際に内容を変更することなく、バンドル内のファイルの 1 つを好きなだけ「タッチ」します。ファイルは新しい (LastModified / LastWrite の方が新しい) が、同じ結合されたコンテンツから計算されているため、ハッシュは一定のままです。スペースは縮小されるため、ファイルにスペースを追加することもできます。

http://localhost:20206/mybundle.css?v=-6520265193368900210

次に、実際に変更します。おそらく、境界線を 1px ではなく 2px に設定します。ハッシュを供給するコンテンツが変更されたため、ハッシュは変更されます。

http://localhost:20206/mybundle.css?v=-4725541136976015445

最後に、境界線を元の状態に戻します (上記の例では、1px に戻します)。「魔法のひも」は、実際にはランダムでも魔法でもありません。代わりに、コンテンツから計算された一致する一方向ハッシュに戻ります。

http://localhost:20206/mybundle.css?v=-6520265193368900210

これで、手動で介入することなく、必要なときにのみハッシュが更新されるので安心できます。

ご質問の他の部分については、

この CSS/JS がデータベースで変更された場合、そのバンドルを「更新」して、それらのファイルの内容がバンドルに再度読み込まれるようにする必要があります。

考え方が逆転しているだけだと思います。バンドルを更新して再読み取りをトリガーする代わりに、ファイルを更新して更新をトリガーします。ASP.NET がファイルの変更を確認すると、コンテンツを再結合し、ハッシュを更新します。

于 2012-04-03T21:11:44.117 に答える
3

良いニュースがあります。必ずしもディスクからではないコンテンツを含む、あなたと同様のシナリオに対する仮想パス プロバイダーのサポートを多くの人が求めてきたので、現在、次のリリースで VPP をサポートすることを計画しています。

このサポートを利用するには、動的 js/css 用に VPP を実装する必要があります。

VPP にはキャッシュ依存メカニズムも組み込まれているため、それらを使用して正しいバンドル キャッシュ エントリを自動的にフラッシュできるはずです。

于 2012-08-23T17:49:08.950 に答える