Как управлять настройками конфигурации для каждого разработчика


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; 
    } 
}