2009-02-26 2 views
25

Как я в настоящее время справиться с этим, имея несколько конфигурационных файлов, таких как:Как вы обрабатываете несколько файлов web.config для нескольких сред?

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

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

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

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

  • WCF клиента Endpoint URLs и безопасности
  • Пользовательские базы данных конфиги
  • сессии строк подключения
  • настройки log4net
+0

Вот как я это сделать, за исключением того, что web.config и веб-dev.config одно и то же. – tvanfosson

ответ

17

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

Я также заметил, что здесь есть аналогичные question здесь, на SO.

0

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

+0

Я бы предположил, что для каждой среды потребуются специализированные подключения к базе данных, конфигурация состояния службы и другие различные настраиваемые элементы, которые в значительной степени зависят от того, в какой среде вы находитесь. –

0

, как мы делали это, чтобы переопределить раздел 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

Это интересно - управляете ли вы каждым из файлов AppSettingsOverride.config в контроль источника тоже? В чем разница между использованием вашего метода и использованием отдельных файлов web.config? –

+0

Самые большие преимущества в том, что каждый разработчик может иметь свои собственные настройки переопределения. Что такое web.config в управлении версиями - это то, что мы хотим в основной среде развертывания, и у нас есть переопределения на наших dev и тестовых серверах. Я бы, наверное, сочетал это с тем, что уже было сказано для лучшего эффекта. –

1

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

0

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

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

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

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

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

В подрывной деятельности, способ сделать это:

СВН ре СВН: игнорировать. Он откроет ваш редактор, после чего вы наберете . Configure.php

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

1

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

1

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

Смежные вопросы