Сведения о вопросе

FUTER

21:39, 6th August, 2020

Теги

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

Просмотров: 430   Ответов: 5

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

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


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



  Сведения об ответе

padenie

15:14, 5th August, 2020

AppSettings можно переопределить с помощью локального файла:

<appSettings file="localoveride.config"/>

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

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

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


  Сведения об ответе

DAAA

10:44, 19th August, 2020

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

Или вы можете иметь несколько строк подключения в файле конфигурации checked in и использовать ключ 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;
    }
}


  Сведения об ответе

pumpa

11:45, 2nd August, 2020

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

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


  Сведения об ответе

P_S_S

07:30, 15th August, 2020

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

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

Затем в моем сценарии nant у меня есть задача, которая копирует текущую среду сборки плюс _ app.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>


  Сведения об ответе

baggs

05:20, 10th August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться