Всем известно, что Visual Studio позволяет изменить содержимое файла Web.config развертываемого приложения в зависимости от используемой конфигурации. При сборке (build) преобразование не выполняется, что не всегда удобно. В этом посте я покажу, как включить преобразование Web.сonfig при локальной сборке проекта.
Начнем с того, что создадим новое ASP.NET MVC приложение и взглянем на автоматически созданные и связанные с Web.config файлы:
Web.Debug.configсодержащие правила преобразований для двух используемых по-умолчанию конфигураций. Конфигураций может быть создано сколько угодно:
Web.Release.config
Чтобы сгенерировать связанные файлы для добавленных конфигураций, достаточно вызвать в контекстном меню Web.config пункт Add Config Transform. Для просмотра результата преобразований выбираем на связанном файле Preview Transform.
На синтаксисе XML-преобразований останавливаться подробно не будем, а перейдем к практической части: для выполнения преобразований при локальной сборке нам потребуется внести изменения в файл проекта *.csproj (рекомендую установить Productivity Power Tools и воспользоваться командой Power Commands - Edit Project File). Перед завершающим тегом документа разместите следующий код:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
<TransformXml
Source="Web.Base.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
Осталось добавить в состав проекта файл Web.Base.config - исходный файл для преобразования, и готово! При каждом билде содержимое Web.Base.config будет трансформировано и записано в Web.config в соответствии с файлом преобразований для выбранной в текущий момент конфигурации. Становится возможным в пару кликов менять всё окружение: строки подключения, endpoint-ы, десятки других параметров... Полезность этого трюка сложно переоценить.
Побочные эффекты:
1. Перезапись Web.config при каждом билде не останется незамеченной от систем управления версиями. Технически в этом нет ничего страшного, поскольку конфигурация хранится в Web.Base.config.
2. При развертывании средствами Visual Studio, трансформация произойдет дважды: при сборке для Web.Base.config, и при публикации для Web.config (автоматически). Есть workaround. По сути, преобразование при развертывании нам больше не нужно. В моем последнем проекте публикация выполнялась при помощи TeamCity, поэтому я просто убрал target, отвечающий за трансформацию из build-скрипта.
О SlowCheetah. Этот плагин добавляет автоматическую трансформацию app.config при сборке... а веб-приложения не поддерживаются. Поэтому в нашем случае использовать его не получится.
Выводы: простейший способ преобразования Web.config займет на реализацию меньше времени, чем на прочтение этого поста. Не забудьте написать подробный комментарий в Web.Base.config, облегчив жизнь следующим поколениям.
Ссылки:
Практическое руководство. Преобразование файла Web.config при развертывании проекта веб-приложения
Web.config Transformation Using TeamCity
Комментариев нет:
Отправить комментарий