Как вы обрабатываете несколько файлов web.config для нескольких сред?
То, как я в настоящее время обрабатываю это, - это несколько файлов конфигурации, например:
web.config
web.Prod.config
web.QA.config
web.Dev.config
Когда проект развертывается в разных средах, я просто переименовываю соответствующий файл с правильными настройками.
У кого-нибудь есть предложения по тому, как справиться с этим лучше?
EDIT:
Вот некоторые из вещей, которые меняются в каждой конфигурации:
- URL-адреса конечной точки клиента WCF и безопасность
- Конфигурации настраиваемых баз данных
- Строки сеанса сеанса
- Настройки log4net
Ответы
Ответ 1
У Скотта Гу было статья об этом раз. Решением, которое он представил, было использование события Pre-build для копирования правильной конфигурации на место в зависимости от выбранной конфигурации сборки.
Я также заметил, что здесь есть аналогичный question здесь.
Ответ 2
Преобразования кажутся действительно полезными для этого. Вы можете заменить определенные разделы разными правилами.
http://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx
Ответ 3
В Visual Studio я создаю события сборки xcopy и сохраняю все файлы конфигурации в папке /config. Вам нужно только одно событие для всех конфигураций, если вы назовете свои файлы после конфигурации сборки: например, перезапись web.config с помощью /config/web. $(Конфигурация).config
Ответ 4
Мой любимый способ справиться с этим - с атрибутом configSource
. По общему признанию, я использую это только для одного элемента (<connectionStrings>
), но он обеспечивает простой способ обмена и отрисовки различных сегментов web.config(что я делаю во время установки через проект WebSetup).
Ответ 5
Я также использую web.DEV.config, web.TEST.config, web.PROD.config и т.д.
Я считаю этот способ самым простым, простым и прямым способом, если ваши проекты не сложны. Мне не нравится делать вещи сложнее, чем необходимо.
Однако я использовал NAnt, и я думаю, что это хорошо работает для этого. Вы можете настроить сборки для разных сред. NAnt берет некоторое чтение, чтобы узнать, как его использовать, но он довольно гибкий.
http://aspnet.4guysfromrolla.com/articles/120104-1.aspx
http://nant.sourceforge.net/
Я использовал его вместе с CruiseControl.net и NUnit для выполнения автоматических ежедневных сборок с помощью проверки unit test и думал, что они хорошо работают вместе.
Ответ 6
Это действительно зависит от того, какая разница между средами, которые заставляют вас использовать разные файлы web.config. Можете ли вы дать больше информации о том, почему каждая среда в настоящее время нуждается в другом?
Ответ 7
Как мы это делали, это переопределить раздел AppSettings:
<appSettings file="../AppSettingsOverride.config">
<add key="key" value="override" />
...
</appSettings>
Это работает только для раздела appSettings и поэтому полезно только в определенной степени. Я был бы очень заинтересован в более надежных решениях.
Изменить ниже
Просто смотрел это:
http://channel9.msdn.com/shows/10-4/10-4-Episode-10-Making-Web-Deployment-Easier/
VS2010 имеет конфигурационные преобразования, которые выглядят довольно устрашающе, должны сделать несколько конфигураций полным бризом.
Ответ 8
У нас есть несколько обходных решений (не все из них выполняются с помощью web.config, но та же идея)
- Мы включаем несколько конфигурационных файлов в пакетное развертывание. Во время установки мы указываем среду, на которую мы устанавливаем.
- Перенесите все настройки среды на сервер базы данных для этой среды. WebServer предоставляет свою среду при запросе имени сервера
- Предоставить несколько настроек (по 1 на каждую среду) и с помощью кода запросить различные настройки.
- Комбинация 2 и 3 (переопределить часть настроек на основе среды - например, имя сервера приложений)
Ответ 9
С помощью самых разных программных средств управления версиями (subversion, git и т.д.) вы можете игнорировать определенные файлы.
Таким образом, в подрывной работе я бы:
configure.template.php - этот файл имеет версию и содержит шаблонные данные конфигурации, такие как пустой DSN
configure.php - этот файл игнорируется, поэтому изменения в нем не отслеживаются.
В подрывной игре способ сделать это:
svn pe svn: игнорировать.
Он откроет ваш редактор, затем вы напечатаете
configure.php
Сохраните, выйдите, проверьте свои изменения, и вам хорошо идти.