在我的大多数应用程序中,我使用iBatis.Net进行数据库访问/建模,使用log4Net进行日志记录。在这样做时,我需要为每个项目提供大量的*.config文件。例如,对于一个简单的应用程序,我需要有以下*.config文件:
当这些应用程序从DEV测试到生产环境时,这些文件中包含的设置会根据环境而改变。
当每个项目有5-10个(或更多)支持可执行文件的文件数量增加时,基础设施团队(对不同环境进行滚转的工作负载)就会变得相当高。我们还有一个配置文件丢失的高风险,或者配置文件中的错误类型。
避免这些风险的最佳方法是什么?我应该将所有配置文件合并到一个文件中吗?(这在iBatis中有可能吗?)我知道,在VisualStudio 2010中,它们为这些配置文件引入了转换,允许开发人员为不同的环境设置所有设置,然后动态地(取决于启动的构建)将配置文件更新到正确的版本。(VS 2010 -转换)
谢谢你能提供的任何帮助。
发布于 2010-02-22 13:18:13
您可以通过添加配置部分来更改主*.config文件(例如web.config或app.config)
我在我的一个web应用程序和我的web.config中使用log4net、活动记录和密码安全。
<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>这样,我只有一个web.config文件。然后,我在我的解决方案名ProjectFiles中创建了一个独立的项目,其中包含了我的所有外部程序集和配置文件。然后,当我请求将解决方案更新到操作端时,我会使用web应用程序文件复制相关的配置文件(test或prod)。
发布于 2010-02-23 09:12:37
另一种方法是在构建或部署时使用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当然,要部署的环境必须以某种方式提供给构建脚本,但无论如何您都需要这样做。
https://stackoverflow.com/questions/1689399
复制相似问题