Кто-нибудь знает какие-либо хорошие инструменты/утилиты для управления файлами Web.Config
между разными средами сборки/развертывания?
Например, у меня есть проект WCF, который в разработке я не хочу включать SSL, но я хочу, чтобы он был включен в производство. Я хочу разные настройки ведения журнала, различные строки подключения к БД, различные обработки ошибок, разные пути к файлам... Даже некоторые разные привязки фреймов Unity (подключайте mocks для модульного тестирования вместо реальных объектов для развертывания).
Поддержание отдельных копий Web.Config
- это боль, потому что добавление новой веб-службы означает редактирование нескольких файлов и синхронизацию их.
Я также заметил, что если вы слишком сильно обманываете Web.Config
вручную, Visual Studio задохнется, если вы попытаетесь использовать мастер "добавить элемент", чтобы, скажем, добавить новую веб-службу для WCF, поскольку он должен изменить Web.Config, чтобы добавить конечную точку, и он больше не может ее разобрать. Поэтому я должен быть осторожным, чтобы не аннулировать существующий Web.Config.
Я также подумал о том, чтобы просто использовать некоторое регулярное выражение для замены и просто создать новый Web.Config
в команде pre-build. Это кажется лучшим вариантом до сих пор...
Любые другие идеи? Похоже, что это должна быть очень распространенная проблема, так как Web.Config
, вероятно, никогда не будет одинаковой между развертываниями разработки и производства.
Update:
Я решил написать быстрое консольное приложение, которое будет принимать все xml файлы в заданном каталоге и объединить их в один, и включать только определенные файлы на основе имени.
Поэтому я могу сделать в каталоге:
WebConfig_All
<configuration>
<configSections>
...
</configSections>
<system.web>
...
</system.web>
</configuration>
connectionStrings_Debug
<configuration>
<connectionStrings>
<add name="connstr" connectionString="...dev..." />
</connectionStrings>
</configuration>
connectionStrings_Release
<configuration>
<connectionStrings>
<add name="connstr" connectionString="...prod..." />
</connectionStrings>
</configuration>
Затем запустите мой инструмент командной строки и передайте конфигурацию (Debug, Release, custom...)
И он объединит все файлы, которые заканчиваются на _All" or
_ <configuration> `.
Итак, теперь у меня есть 80% моего Web.Config в одном файле WebConfig_All
и 20% пользовательских материалов в отдельных файлах для каждой конфигурации сборки. Затем я могу запустить инструмент командной строки в качестве задачи предварительной сборки в VisualStudio или из NAnt или где бы я ни хотел...
Я также сделал свою логику слияния XML достаточно хорошей, чтобы обрабатывать такие вещи, как:
<x>
<y a="1">
<z a="1"/>
</y>
</x>
сливается с
<x>
<y a="1">
<z a="2"/>
</y>
<y a="2"/>
</x>
приводит к:
<x>
<y a="1">
<z a="1"/>
<z a="2"/>
</y>
<y a="2"/>
</x>
Хорошо выглядит до сих пор...:)
Followup:
Этот вопрос немного старенький, поэтому я хотел указать, что VisualStudio 2010 имеет функцию для преобразования web.config: http://msdn.microsoft.com/en-us/vstudio/Video/ff801895
Конечно, в типичной моде Microsoft, реализующей только 50% возможностей, она работает только для веб-проектов с использованием веб-развертывания. Существует плагин для преобразования преобразований в другие проекты, расположенные здесь: http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx
Вы также можете использовать инструмент BuildMaster для управления конфигурационными файлами (вместе со строками, тестами, сценариями БД и т.д.). )