BundleTransformer.Less wstrzykuje zmienne w zależności od kontekstu / żądania

Chcielibyśmy skorzystać z mechanizmu łączeniaSystem.Web.Optimization w połączeniu z transformatorem Less.

Problem polega na tym, że ta sama aplikacja / serwer obsługuje strony dla różnych markowych stron internetowych. Tak więc w zależności od „SiteContext” używane są te same pliki .less, ale różne wartości powinny być używane przez zmienne .less. Chcemy więc, aby (ponownie) używać tych samych mniejszych plików, ale z różnymi zmiennymi w zależności od kontekstu żądania.

Spróbowałem kilku różnych teorii:

We wszystkich 3 przypadkach konfiguruję różne pakiety w zależności od SiteContext.

1 wstrzyknij dyrektywę @import z tematycznymi zmiennymi za pomocą aniestandardowy VirtualPathProvider przechwytuje plik variables.less.

Więc mam:

plik stylizacji, np .: header.less (importuje plik zmiennych)plik zmiennych: variables.lessplik zmiennych tematycznych: variables-theme.less (wstrzyknięty do variables.less przez VirtualPathProvider)

To nie działa, ponieważ bufor BundleTransformer widzi to jako ten sam plik i nie wie o SiteContext. Klucz pamięci podręcznej jest oparty na adresie URLIAsset i nie możemy wpływać na to zachowanie.

2 Zastąp zmienne bez importu według zmiennych-themed.less zniestandardowy transformator który działa przed transformatorem Less.

Znowu nie ma szczęścia, te same problemy z buforowaniem.

Jako efekt uboczny, dodatkowy transformator nie został wywołany w debugowaniu, ponieważ zasoby nie są pakowane, ale wywoływane indywidualnie przezLessAssetHandler. Można to rozwiązać, pisząc własny AssetHandler, który wywołuje wszystkie wymagane transformatory.

3 utwórz tematyczne nazwy zasobów które są rozwiązywane przezniestandardowy VirtualPathProvider Na przykład. Dodaj header-themeX.less do pakunku, ten plik nie istnieje, ale rozwiąż ten plik do header.less i użyj metody 2, aby ustawić poprawny import pliku zmiennych. (zastąp import zmiennych. bez wersji tematycznej).

Po raz kolejny nie ma szczęścia. Myślę, że mogłoby to rozwiązać problem z buforowaniem, gdyby nie byłoBundle.Include(string virtualPath) to robiFile.Exists(path) wewnętrznie. Nie przechodzi przezCustomVirtualPathProvider.

Czy szukam głębokiego rozwiązania tego problemu? Wszystkie pomysły są mile widziane, mogę sobie wyobrazić, że stanie się to problemem dla coraz większej liczby osóbSystem.Web.Optimization biblioteka staje się bardziej popularna ...

Weź pod uwagę, że:

mamy wiele plików .less / cssbędziemy mieli 5 lub więcej tematówlubimy trzymać rzeczy działające w visual studio (dlatego header.less ma ref. do variables.less)

Dziękujemy za wszelkie opinie.

questionAnswers(1)

yourAnswerToTheQuestion