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)Спасибо за любые отзывы.