配置包含特定于环境的设置的文件

时间:2009-10-06 16:11:32

标签: .net aop config

在我的组织中,我们有多个环境(Dev,QA,Stage,Prod,Disaster Recovery),我希望我的app / web.config文件在URI,连接字符串等中不包含特定于环境的详细信息。我的首选方法将执行运行时替换,例如 而不是:

<endpoint address="http://MyDevWebServer/SomeService" binding="basicHttpBinding"...

我更喜欢这样的东西:

<endpoint address="http://{Env:WebServerName}/SomeService" binding="basicHttpBinding"...

从我可以控制的类中读取配置设置很简单(只提供一个包装器,用该环境的实际服务器名称执行替换{Env:WebServerName})但我也希望在设置时进行此替换从类中读取我无法控制(例如WCF,NHibernate等)。有谁知道注入这种替代逻辑的方法。我假设AOP方法可能是可能的,但个人对AOP框架没有多少经验。

6 个答案:

答案 0 :(得分:1)

您应该可以通过从提供此替换的ApplicationSettingsBase派生自定义类来实现此目的。

我建议您阅读Application Settings Architecture。它描述了制作您自己的设置架构的过程,包括设置您自己的处理程序,可以从任何来源读取,或者在此过程中执行其他工作。

答案 1 :(得分:1)

一种方法是使用ConfigSource作为配置部分(appSettings,connectionStrings等)。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx。这样web / app.config就可以包含核心信息,并且可以在该环境的文件中设置唯一的环境设置。

答案 2 :(得分:1)

我们有一个post-build nant脚本,它使用XPath来识别和替换特定于环境的值,具体取决于我们所针对的环境。默认情况下,所有配置值都用于开发环境。这为构建过程增加了一个短暂的延迟,但事实证明这是一个非常强大的解决方案 - 即没有混乱或交叉的环境设置。

答案 3 :(得分:0)

我们将设置移至数据库,因此无需处理此问题,请参阅here.

答案 4 :(得分:0)

我完全同意这种替代是可取的,requested this feature on Microsoft Connect

微软对此并不感兴趣:(

答案 5 :(得分:0)

当您尝试找到运行时替换的方法时,我建议在这种情况下构建时替换将是更好的解决方案。例如,我们在构建期间使用nant任务xmlpoke替换配置值。 您还可以尝试在web deployment projects中替换web.config部分 来自MSBuild社区任务(example)的XmlMassUpdate任务。