BundleTransformer.Less вводит переменные в зависимости от контекста / запроса

Мы хотели бы использовать механизм связыванияSystem.Web.Optimization в сочетании с трансформатором Less.

Проблема в том, что одно и то же приложение / сервер обслуживает страницы для разных фирменных сайтов. Так что в зависимости отSiteContext» используются одни и те же файлы .less, но переменные .less должны использовать разные значения. Поэтому мы хотим (повторно) использовать одни и те же файлы меньше, но с разными переменными в зависимости от контекста запроса.

Я попробовал пару разных теорий:

Во всех 3 случаях я устанавливаю разные пакеты в зависимости от SiteContext.

1 ввести директиву @import с тематическими переменными, используяпользовательский VirtualPathProvider перехватывает файл variables.less.

Так что я:

файл стиля, например: header.less (импортирует файл переменных)файл переменных: variables.lessфайл тематических переменных: variable-theme.less (добавляется в variables.less через VirtualPathProvider)

Это не работает, потому что кеш BundleTransformer видит это как тот же файл и нене знаю о SiteContext. Ключ кеша основан на URL-адресеIAsset и мы не можем влиять на это поведение.

2 Замените переменные. Без импорта переменными-themed.less сизготовленный на заказ трансформатор который бежит перед Меньшим трансформатором.

Опять не повезло, те же проблемы с кешированием.

И как побочный эффект, дополнительный трансформатор не был вызван в отладке, потому что активы не связаны, а вызываются индивидуальноLessAssetHandler, Эту проблему можно решить, написав свой собственный AssetHandler, который вызывает все необходимые преобразователи.

3 создать тематические имена активов которые решаютсяпользовательский VirtualPathProvider Например. Добавить header-themeX.less в комплект, этот файл неt существует, но вы разрешаете этот файл в header.less и используете метод 2, чтобы установить правильный импорт файла переменных. (замените импорт переменных .less на тематическую версию).

Еще раз не повезло. Я думаю, что это могло бы решить проблему кеширования, если быт дляBundle.Include(string virtualPath) это делаетFile.Exists(path) внутренне. Это нет пройти через.CustomVirtualPathProvider

Я ищу глубоко, чтобы решить это? Все идеи приветствуются, я могу представить, что это станет проблемой для все большего числа людей, посколькуSystem.Web.Optimization библиотека становится все более популярной ...

Имейте в виду, что:

у нас много файлов .less / cssу нас будет около 5 темнам нравится, чтобы все работало в визуальной студии (поэтому header.less имеет ссылку на variables.less)

Спасибо за любые отзывы.

Ответы на вопрос(1)

Ваш ответ на вопрос