-->

пятница, 6 марта 2015 г.

Преобразование Web.config при сборке веб-приложения

Всем известно, что 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

Комментариев нет:

Отправить комментарий