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

对于我的大多数应用程序,我使用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是否可行?)我知道在Visual Studio 2010中,他们引入了这些配置文件的转换,这些配置文件允许开发人员为不同的环境设置所有设置,然后动态地(取决于构建启动)配置文件得到更新到正确的版本。 (VS 2010 - 转换)

    感谢您提供任何帮助。


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

    我在我的一个web应用程序和我的web.config中使用log4net,Active Record和Ciphersafe

    <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="LogsTimeRegWeb.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中创建了一个独立的Project,其中包含我所有的外部程序集和配置文件。 然后,当我向操作端提出更新解决方案的请求时,我将相关配置文件(测试或产品)复制到Web应用程序文件


    另一种方法是在构建或部署时使用类似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
    

    当然,要部署的环境必须以某种方式提供给构建脚本,但无论如何您都需要这样做。

    链接地址: http://www.djcxy.com/p/43595.html

    上一篇: Reduce number of config files to as few as possible

    下一篇: recommendation for html parser library in as3 for flex project