2008-08-21 3 views
3

В .NET-проекте, скажем, у вас есть параметр конфигурации - как строка подключения - хранится в файле app.config, что отличается для каждого разработчика в вашей команде (они могут быть используя локальный SQL Server или конкретный экземпляр сервера, или используя удаленный сервер и т. д.).Как управлять настройками конфигурации для каждого разработчика

Как вы можете структурировать свое решение, чтобы каждый разработчик мог иметь свои собственные «предпочтения» разработки (т. Е. Не проверять исходное управление), но предоставить строку подключения по умолчанию, которая проверяется в исходном элементе управления (таким образом, для правильной установки по умолчанию для процесс сборки или новые разработчики).


Edit: Может ли " file" метод, предложенный @Jonathon каким-то образом используется с секцией connectionStrings?

ответ

4

AppSettings может быть изменён с помощью локального файла:

<appSettings file="localoveride.config"/> 

Это позволяет каждому разработчику сохранить свои собственные локальные настройки.

Что касается строки подключения, в идеальном мире все разработчики должны подключаться к тестовой БД, а не запускать SQL Server каждый.

Однако я нашел, что лучше всего сохранить файл с именем Web.Config.Prd в исходном управлении и использовать его для развертывания сборки. Если кто-то изменяет web.config, они также должны добавить изменения в файл .PRD ... Там нет хорошей автоматизации там :(

0

Я всегда делаю шаблоны для своих конфигурационных файлов.

В качестве примера я использую NAnt для построения моих проектов. У меня есть файл, проверенный в local_properties.xml.template. Моя сборка NAnt будет предупреждать разработчика, если local.properties.xml не существует. Внутри этого файла будут указаны конкретные настройки рабочей станции. Шаблон будет проверен в исходном элементе управления, но фактической конфигурации не будет.

0

Я использую довольно архаичный дизайн, который просто работает.

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

Тогда в моем NANT сценарий, у меня есть задача, которая копирует, текущая среда сборки плюс _ приложение .config и скопируйте его в app.config.

Его противный, но вы не можете попасть между поставщиками и ConfigurationManager, чтобы подделать его, указав, что провайдеры рассматривают строку соединения «dev» или «prod» и имеют только 3 строки подключения.

Nant задача:

<target name="copyconfigs" depends="clean"> 
    <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}"> 
    <in> 
    <items> 
     <include name="**/${ConfigPrefix}App.config" /> 
     <include name="**/${ConfigPrefix}connectionstrings.config" /> 
     <include name="**/${ConfigPrefix}web.config" /> 
    </items> 
    </in> 
    <do> 
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" /> 
    </do> 
    </foreach></target> 
0

Может метод «файл» предложил @Jonathon быть каким-то образом используется с connectionStrings раздел?

Нет, но ничего не мешает вам хранить ConnectionString в качестве ключа AppSettings.

3

Edit: Может ли метод "файл" предложил по @Jonathon каким-то образом используется с секцией ConnectionStrings?

Или вы можете иметь несколько строк подключения в файле с проверкой и использовать ключ AppSettings, чтобы определить, какой ConnectionString следует использовать. Для этой цели у меня есть следующее в моей кодовой базе:

public class ConnectionString 
{ 
    public static string Default 
    { 
     get 
     { 
      if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"])) 
       throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings"); 

      return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]); 
     } 
    } 

    public static string GetByName(string dsn) 
    { 
     return ConfigurationManager.ConnectionStrings[dsn].ConnectionString; 
    } 
} 
Смежные вопросы