7

テーマにスタイルバンドルを使用するasp.net MVC4 Webアプリケーションがあります。私は物理的なテーマのフォルダ構造を持っています。Application_Startが発生した後、バンドルを動的に追加するにはどうすればよいですか?

Themes\ 
    _Base\ 
    Theme1\ 
    Theme2\ 
    ...\ 

各テーマフォルダには任意の数のLESSファイルがあります。私のBundleConfig.RegisterBundlesメソッドでは、各テーマフォルダをループし、それぞれのバンドルを作成するロジックがあります。 System.Web.Optimizationのバンドルメカニズムは、の既存のファイルとフォルダ内の変更を監視し、うまく動作するバンドルキャッシュをフラッシュします()。

しかし、私が必要とするのは、新しいテーマフォルダ(Theme3\)を私のThemesルートフォルダにコピーして、アプリケーションが最初にそれを再起動することなくそれらを認識できる方法です。私は、すべてのフォルダ内のすべてのファイルを参照する「ダミー」バンドル...

var changeTracking = new StyleBundle(BUNDLE_ROOT); 
changeTracking.Transforms.Clear(); 
changeTracking.IncludeDirectory(THEME_ROOT, "*.less", true); 
changeTracking.Transforms.Add(new LessTransform()); 
changeTracking.Transforms.Add(new CssMinify()); 
bundles.Add(changeTracking); 

を作成しようとした...それは助けていないようです。 Theme3\を作成すると、BundleConfig.RegisterBundlesへの別の呼び出しは発生しません。新しいテーマが認識されるようにするには、IISRESETを実行し、アプリケーションプールをリサイクルする必要があります。

Application_Startが発生した後にバンドルを動的に追加する方法はありますか?

答えて

4

これは明示的にサポートしようとしているものではなく、アプリケーションが起動する前にすべてのバンドルが登録されていることが必要です。そうしないと、すべてのサーバー上にバンドルの一部が存在しないWebファームのシナリオで問題が発生し、404となります。

バンドルキャッシュの依存関係は、ASP.NETキャッシュからの古い応答をフラッシュしますが、global.asaxから呼び出されたRegisterBundlesの別の呼び出しをトリガーすることはなく、次のようなアプリリサイクル時にのみ呼び出されます。あなたは言及しました。

+0

ありがとうございます。キャッシュを手動でフラッシュする方法はありますか(おそらくhttp://stackoverflow.com/questions/12317391/how-to-force-bundlecollection-to-flush-cached-script-bundles-in-mvc4に似ています)。アプリケーションの実行中にバンドルを再構築するよう強制しますか? – racingcow

+0

これは、Orderer/Builder/EnableFileExtensionReplacementsのように、バンドル上のこれらのプロパティのいずれかでno-opを設定することで可能です。基本的にはbundle.Orderer = bundle.Ordererを実行してください。 –

+0

"バンドルを再構築する"の代わりに "Register RegisterBundles"と言うべきでしょうか?私は既存のバンドルのファイルをリフレッシュするのではなく、新しいものを追加しようとしています。 – racingcow

関連する問題