Управление файлами web.config

У меня есть 3 среды: Dev, QA, Prod на .NET 4. Каждая имеет уникальный файл web.config. У нас были проблемы с управлением всеми тремя версиями. При ручном слиянии файлов web.config в TFS легко упустить из виду что-то важное. Более чем однажды мы получали строку подключения, указывающую на QA на Prod.

Итак, я прочитал при преобразованиях web.config. Похоже, для них требуется MSBUILD. У нас нет сервера сборки, поэтому я не уверен, как я могу попытаться использовать это решение. Есть ли способ заставить преобразования работать с обычной веб-публикацией?

Есть ли у вас какие-либо альтернативные предложения по управлению 3 файлами web.config?


person P.Brian.Mackey    schedule 08.07.2011    source источник


Ответы (4)


Есть ли способ заставить преобразования работать с обычной веб-публикацией?

Обязательно взгляните на эту ссылку MSDN. Вам не нужен MSBUILD. Вы можете установить строки подключения для различных сред в отдельных файлах конфигурации. Например, у вас могут быть Web.config, Web.QA.config и Web.Prod.config, где QA и Prod разделены Конфигурации сборки Visual Studio.

В качестве альтернативы вы можете просто использовать конфигурации сборки, которые добавляются по умолчанию: Web.config (локальная разработка), Web.Debug.config (использовать для контроля качества) и Web.Release.config (использовать для производства).

Используя эту настройку в качестве примера, Web.config будет иметь всю конфигурацию, Web.Debug.config будет иметь только конфигурацию, которая изменяется для этой среды (строки подключения, настройки приложения и т. Д.), А Web.Release.config имеет только конфигурацию это меняется для этой среды.

После того, как ваши конфигурации и преобразования будут настроены, вы просто измените конфигурацию сборки, выполните сборку и публикацию из Visual Studio.

person BrandonZeider    schedule 08.07.2011
comment
Затем вы просто отвязываете файл web.debug.conf от TFS, чтобы другие могли его редактировать? Пример: Файл - Контроль версий - Исключить web.debug.config из системы контроля версий. ? - person Mark B; 20.12.2011
comment
@MarkB, отвязать не нужно. это исходный файл, как и любой другой. любой должен иметь возможность редактировать его в соответствии с конфигурацией вашей политики TFS. - person Tsahi Asher; 12.11.2013
comment
Можно ли это сделать без публикации? - person AlexFoxGill; 09.07.2014

Есть ли у вас какие-либо альтернативные предложения по управлению 3 файлами web.config?

Да не управляйте ими. Чем меньше мы успеваем, тем меньше шансов на ошибку. Используйте одинаковые файлы web.config для всех ваших сред. Повсюду развернут один и тот же дистрибутив.

И все ключи, зависящие от среды, такие как базовые URL-адреса, строки подключения, ... могут быть определены в machine.config, который вы развертываете только один раз на каждом сервере и повторно используете из всех ваших приложений. Или web.config в корне вашего сайта IIS, от которого будут происходить все приложения.

person Darin Dimitrov    schedule 08.07.2011
comment
Я бы не хотел, чтобы настройки приложения помещались в файл machine.config. Довольно часто на веб-серверах размещается несколько приложений, и размещение всех настроек в файле machine.config - это верный путь к катастрофе. - person Simon Halsey; 08.07.2011

Если вы используете проект websetup для создания msi, вы можете добавить собственный класс установщика в websetup. Это даст вам возможность создавать предопределенные пакетные сценарии, которые будут правильно устанавливать значения в web.config

msiexec.exe /Qb! /i "MyWebsiteMsi.MSI" SQL_SERVER_ConnStr="ABC" 

Вот страница со старым примером. введите здесь описание ссылки

person Lareau    schedule 08.07.2011

Альтернативой является создание переноса ваших настроек, которые изменяются, во внешний файл и ссылки на этот файл обратно с помощью атрибута configSource. Для разделов, которые отличаются, вы помещаете это во внешний файл.

Затем вы можете либо иметь файлы с отдельными именами, например dev.config, qa.config, live.config и изменить имя в web.config, либо иметь 1 файл с именем environment.config, и вы никогда не объедините его между средами.

Обратной стороной является то, что весь раздел настроек должен быть перемещен в файл.

Саймон

person Simon Halsey    schedule 08.07.2011