将配置文件的数量减少到尽可能少

Sco*_*ott 7 configuration log4net configuration-files ibatis.net visual-studio-2008

对于我的大多数应用程序,我使用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 - 转型)

感谢您提供的任何帮助.

arm*_*nvg 2

您可以通过添加配置部分来更改主 *.config 文件(例如 web.config 或 app.config)

我在我的一个 Web 应用程序中使用 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>
Run Code Online (Sandbox Code Playgroud)

然后我有每个配置部分,例如对于 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>
Run Code Online (Sandbox Code Playgroud)

这样我就只有 1 个 web.config 文件。然后,我在解决方案名称 ProjectFiles 中创建了一个单独的项目,其中包含所有外部程序集和配置文件。然后,当我请求将解决方案更新到操作端时,我将相关配置文件(测试或产品)与 Web 应用程序文件一起复制