System.Web.Optimization
レストランスと組み合わせてのバンドリング機構のご利用をお願い致します。
問題は、同じアプリケーション/サーバーが異なるブランドの Web サイトのページを提供することです。そのため、「SiteContext」に応じて同じ .less ファイルが使用されますが、.less 変数では異なる値を使用する必要があります。したがって、リクエストのコンテキストに応じて、同じ少ないファイルを (再) 使用する必要がありますが、変数は異なります。
私はいくつかの異なる理論を試しました:
3 つのケースすべてで、SiteContext に応じて異なるバンドルをセットアップします。
1 variables.less ファイルをインターセプトするカスタム VirtualPathProviderを使用して、テーマ変数を含む @import ディレクティブを挿入します。
ので、私は持っています:
- スタイリング ファイル例: header.less (変数ファイルをインポートします)
- 変数ファイル: variables.less
- テーマ変数ファイル: variables-theme.less (VirtualPathProvider を介して variables.less に挿入されます)
BundleTransformer キャッシュはこれを同じファイルと見なし、SiteContext を認識しないため、これは機能しません。キャッシュ キーは URL に基づいており、IAsset
この動作に影響を与えることはできません。
2 variables-themed.less によるvariables.less インポートを、Less トランスフォーマーの前に実行されるカスタム トランスフォーマーに置き換えます。
繰り返しますが、同じキャッシングの問題です。
また、副作用として、追加のトランスフォーマーはデバッグで呼び出されませんでした。これは、アセットがバンドルされておらず、 によって個別に呼び出されているためLessAssetHandler
です。これは、必要なすべてのトランスフォーマーを呼び出す独自の AssetHandler を作成することで解決できます。
3カスタム VirtualPathProviderによって解決されるテーマ別アセット名を作成します 。header-themeX.less をバンドルに追加します。このファイルは存在しませんが、このファイルを header.less に解決し、方法 2 を使用して正しい変数ファイルのインポートを設定します。(variables.less のインポートをテーマ バージョンに置き換えます)。
もう一度運がない。内部Bundle.Include(string virtualPath)
で行うことがなければ、これでキャッシュの問題を解決できると思います。File.Exists(path)
を経由しませんCustomVirtualPathProvider
。
これを解決するために深く探していますか?System.Web.Optimization
すべてのアイデアを歓迎します。ライブラリの人気が高まるにつれて、これはますます多くの人々にとって問題になると想像できます...
それを念頭に置いて:
- 多くの .less/css ファイルがあります
- 5つほどのテーマがあります
- 私たちはビジュアルスタジオで物事を動かし続けるのが好きです (それが、header.less が variables.less への参照を持っている理由です)
フィードバックをお寄せいただきありがとうございます。