Как вы обрабатываете несколько файлов web.config для нескольких сред? - PullRequest
26 голосов
/ 27 февраля 2009

Способ, которым я в настоящее время справляюсь, заключается в наличии нескольких файлов конфигурации, таких как:

web.config
web.Prod.config
web.QA.config
web.Dev.config

Когда проект развертывается в разных средах, я просто переименовываю соответствующий файл с правильными настройками.

У кого-нибудь есть предложения, как лучше с этим справиться?

EDIT: Вот некоторые вещи, которые меняются в каждой конфигурации:

  • URL-адреса оконечной точки клиента WCF и безопасность
  • Конфиги пользовательских баз данных
  • Строки подключения к сеансу
  • настройки log4net

Ответы [ 9 ]

17 голосов
/ 27 февраля 2009

У Скотта Гу на этот раз была статья . Решение, которое он представил, состояло в том, чтобы использовать событие Pre-build для копирования правильной конфигурации на место в зависимости от выбранной конфигурации сборки.

Я также заметил, что на SO уже есть похожий вопрос .

6 голосов
/ 15 ноября 2012

Преобразования кажутся действительно полезными для этого. Вы можете заменить определенные разделы другими правилами.

http://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx

1 голос
/ 27 февраля 2009

Я также использую 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 для выполнения автоматических ежедневных сборок с проверкой юнит-тестов и думал, что они хорошо работают вместе.

1 голос
/ 27 февраля 2009

Мой любимый способ решения этой проблемы - атрибут configSource. По общему признанию, я использую это только на одном элементе (<connectionStrings>), но он предоставляет простой способ замены и извлечения различных сегментов файла web.config (который я делаю во время установки через проект WebSetup).

1 голос
/ 27 февраля 2009

В Visual Studio я создаю события сборки xcopy и храню все файлы конфигурации в папке / config. Вам нужно только одно событие для всех конфигураций, если вы называете свои файлы после конфигурации сборки: т.е. перезаписывает web.config с помощью /config/web.$(Configuration).config

1 голос
/ 27 февраля 2009

То, как мы это делаем, это переопределение раздела 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 имеет преобразования конфигурации, которые выглядят довольно круто, должны сделать несколько конфигураций полным бризом.

0 голосов
/ 27 февраля 2009

С помощью самых разных программ управления версиями (subversion, git и т. Д.) Вы можете игнорировать определенные файлы.

Таким образом, в подрывной деятельности я бы имел:

configure.template.php - этот файл является версионным и содержит шаблонные данные конфигурации, такие как пустые уведомления о доставке. configure.php - этот файл игнорируется, поэтому изменения в нем не отслеживаются.

В Subversion способ сделать это:

svn pe svn: игнорировать. Откроется ваш редактор, а затем вы наберете configure.php

Сохраните, выйдите, проверьте свои изменения, и все готово.

0 голосов
/ 27 февраля 2009

У нас есть несколько обходных путей (не все они сделаны с помощью web.config, но одна и та же идея)

  1. Мы включаем несколько файлов конфигурации в пакетное развертывание. Во время установки мы указываем среду, в которую устанавливаем.
  2. Перенос всех специфических параметров среды на сервер базы данных для этой среды. WebServer предоставляет свою среду при запросе имени сервера
  3. Укажите несколько настроек (по одной на каждую среду) и используйте различные настройки кода для запроса.
  4. Комбинация 2 и 3 (переопределить часть настроек в зависимости от среды - например, имя сервера приложений)
0 голосов
/ 27 февраля 2009

Это действительно зависит от того, какая разница между средами, которые заставляют вас использовать разные файлы web.config. Можете ли вы дать больше информации о том, почему в настоящее время каждая среда нуждается в отдельной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...