Храните вещи, которые, по вашему мнению, могут измениться между средами в файлах конфигурации.
Visual Studio может сделать тяжелый подъем здесь, если хотите; вы можете создавать настройки и указывать значения по умолчанию на вкладке «Параметры» свойств проекта Visual Studio.
Это создаст файл конфигурации для вас и обеспечит строго типизированный доступ через Properties.Settings.Default.
Что касается обработки нескольких сред через сборку, я видел, как некоторые люди рекомендуют поддерживать несколько копий конфигурационных файлов - по одному для каждой среды, например, а другие рекомендуют использовать nant для изменения файлов конфигурации во время сборки или развертывания фаза. Вы можете использовать свойство, переданное nant в командной строке (например), чтобы выбрать, какую среду вы строите (или развертываете, в зависимости от того, как вы это делаете).
Я не рекомендую ни один из этих подходов, потому что:
- Они оба требуют изменений в сборку для поддержки новых сред.
- Если вы изменили настройку в развернутой среде и забыли обновить сборку, то следующее развертывание сбросит изменение (несколько побеждая точку настроек конфигурации).
- Если кто-то создает новую среду (скажем, они хотят изучить проблемы, возникающие при обновлении до новой версии SQL Server, например) и не хочет создавать все новые файлы конфигурации в системе сборки, они могут решить только используйте настройки существующей среды. Предположим, они решили развернуть с использованием настроек в реальном времени и забыть что-то изменить после этого. Теперь ваша новая «тестовая» среда может указывать на живой комплект.
Я создаю копию каждого конфигурационного файла (например, web.config.example) и закомментирую настройки внутри них (если у них нет значимых значений по умолчанию). Я проверяю их и у них развернуты вместо реального web.config (т. Е. Web.config НЕ развернут автоматически. Web.config.example развернут как web.config.example.
Администратор новой среды должен будет скопировать и переименовать файл в web.config и предоставить содержательные значения). Я также поместил все вызовы в настройки моего собственного класса-обертки - если обязательная настройка отсутствует, я выдаю исключение.
Сборка и мои среды больше не зависят друг от друга - одна сборка может быть развернута в любой среде.
Если параметр отсутствует (новая среда или новая настройка в существующей среде), вы получаете хорошее четкое исключение, поднятое, чтобы сообщить администратору, что делать.
Существующие настройки не изменяются после обновления, поскольку обновлены только файлы .example. Задача администратора - сравнить текущие настройки с последним примером и при необходимости пересмотреть.
Чтобы настроить развертывание, вы можете поместить все настройки среды (пути установки и т. Д.) В свойства nant и переместить их в отдельный файл (например, settings.build), затем использовать задачу nant include, чтобы включить этот файл в в верхней части вашего файла развертывания (например, deploy.build). Затем вы можете развернуть новую версию deploy.build, не перезаписывая свои изменения в конфигурации, поскольку они находятся в settings.build. Если новое свойство введено в deploy.build nant, сбойное сообщение будет сообщено вам, что вы не установили это свойство.
Привет, спасибо за ответ. Это уже большой кусок того, что мы уже делаем, довольно похоже. Но я действительно хочу знать, как обрабатывать различия в развертывании среды. Так, например: резервное копирование старого приложения перед установкой более новой версии веб-приложения. – Bertvan
Хорошо, я добавил немного к моему ответу, но вы уже упоминаете использование отдельных файлов в своем вопросе, поэтому я думаю, что вы уже были там по своему усмотрению. – robaker