Уменьшите количество конфигурационных файлов до минимума

Для большинства моих приложений я использую iBatis.Net для доступа к базе данных / моделирования и log4Net для регистрации. Для этого мне нужно несколько файлов *.config для каждого проекта. Например, для простого приложения мне нужны следующие файлы *.config:

  • app.config ([AssemblyName]. [Extention].config)
  • [AssemblyName].SqlMap.config
  • [AssemblyName].log4Net.config
  • [AssemblyName].SqlMapProperties.config
  • providers.config

Когда эти приложения переходят из среды DEV в TEST в среды PRODUCTION, параметры, содержащиеся в этих файлах, меняются в зависимости от среды.

Когда количество файлов составляется из-за наличия 5-10 (или более) поддерживаемых исполняемых файлов на проект, рабочая нагрузка на команду инфраструктуры (те, кто выполняет развертывание в различных средах) становится довольно высокой. У нас также есть высокий риск пропуска одного из файлов конфигурации или опечатки в файле конфигурации.

Каков наилучший способ избежать этих рисков? Должен ли я объединить все файлы конфигурации в один файл? (возможно ли это с iBatis?) Я знаю, что с VisualStudio 2010 они вводят преобразования для этих файлов конфигурации, которые позволяют разработчику настраивать все параметры для различных сред, а затем динамически (в зависимости от запускаемой сборки) файлы конфигурации обновляются на правильные версии. ( VS 2010 - трансформации)

Спасибо за любую помощь, которую вы можете предоставить.

2 ответа

Другой способ - создать файлы конфигурации во время сборки или развертывания, используя что-то вроде скрипта AWK или XSLT в сочетании с одним файлом, содержащим определенные настройки для каждой среды.

ANT имеет плагины, которые позволяют это, другие инструменты сборки, вероятно, тоже делают или позволяют подключать их с помощью хорошо опубликованного API.

Например, у вас может быть файл шаблона, читающий что-то вроде

database.uri=@@dbUri
database.user=@@dbUser
database.credentials=@@dbCredentials

и для каждого окружения файла эти теги взяты из как

dbUri=jdbc:oracle:10.1.1.10:1224:ORCL
dbUser=Scott
dbCredentials=Tiger

Развертываемая среда должна быть, конечно, каким-то образом добавлена ​​в сценарий сборки, но вам все равно придется это делать.

Вы можете изменить основной файл *.config (например, web.config или app.config), добавив разделы конфигурации

Я использую log4net, Active Record и Ciphersafe в одном из моих веб-приложений и в моем файле web.config.

<configuration>
...
<configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
            <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
            <section name="cipherSafeConfigSection" type="Obviex.CipherSafe.AppConfigSectionHandler,CipherSafe" />
    </configSections>
...
</configuration>

Тогда у меня есть раздел конфигурации для каждого, например, для log4net у меня есть

<configuration>
...
<log4net>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="Logs\\TimeRegWeb.log"/>
            <appendToFile value="true"/>
            <datePattern value="yyyyMMdd"/>
            <rollingStyle value="Date"/>
            <filter type="log4net.Filter.LevelRangeFilter">
                <acceptOnMatch value="true"/>
                <levelMin value="DEBUG"/>
                <levelMax value="FATAL"/>
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n"/>
            </layout>
        </appender>
        <root>
            <level value="DEBUG"/>
            <appender-ref ref="RollingLogFileAppender"/>
        </root>
    </log4net>
...
</configuration>

Таким образом, у меня есть только 1 файл web.config. Затем я создал отдельный проект с именем ProjectFiles, который содержит все мои внешние сборки и файлы конфигурации. Затем, когда я делаю запрос на обновление моего решения для операционной стороны, я копирую соответствующий файл конфигурации (test или prod) с файлами веб-приложения.

Другие вопросы по тегам