7

テーマにスタイル バンドルを使用する asp.net MVC4 Web アプリケーションがあります。私はそのような物理的なテーマのフォルダ構造を持っています...

 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

1 に答える 1

4

これは、明示的にサポートしようとしているものではありません。アプリの起動前にすべてのバンドルが登録されることが期待されます。そうしないと、一部のバンドルがすべてのサーバーに存在しない webfarm シナリオで問題が発生し、404 が発生します。

バンドル キャッシュの依存関係は、ASP.NET キャッシュからの古い応答のフラッシュを処理しますが、global.asax から呼び出され、前述のようにアプリのリサイクル中にのみ呼び出される RegisterBundles への別の呼び出しをトリガーしません。 .

于 2013-03-11T04:02:16.487 に答える