我们有一套互连的.Net 3.5应用程序。有些是网站,有些是网络服务,有些是Windows应用程序。每个应用程序当前都有自己的配置文件(app.config或web.config),目前配置文件中有一些重复的密钥(目前手动保持同步),因为多个应用程序需要相同的配置值。此外,这套应用程序部署在各种环境中(开发,测试,实时等)
从单个配置源管理这些多个应用程序的配置的最佳方法是什么,因此如果需要,可以在多个应用程序之间共享配置值?我们还希望为每个环境分别配置(因此在部署时您不必手动更改某些特定于环境的配置值,例如连接字符串),但同时又不想维护多个大型配置文件(每个环境一个)在添加新配置密钥时保持同步将会很麻烦。
答案 0 :(得分:7)
Visual Studio有一个相对模糊的功能,允许您将现有项目添加为链接,这应该可以实现您正在寻找的内容。有关更多详细信息,请查看有关此主题的Derik Whittaker's post。
Visual Studio确实应该让这个选项更加明显。没有人真的想过点击“添加”按钮旁边的那个小箭头。
答案 1 :(得分:3)
您可以将App.config拆分为多个配置文件。您只需指定包含配置部分的文件的名称。
更改app.config:
<SomeConfigSection>
<SettingA/>
<SettingB/>
</SomeConfigSection>
<OtherSection>
<SettingX/>
</OtherSection>
进入app.config和SomeSetting.xml:
<SomeConfigSection file="SomeSetting.xml" />
<OtherSection file="Other.xml" />
SomeSetting.xml包含的位置:
现在,您可以使用某种构建或部署脚本从不同的部分文件中编写app.config。 E.g:
if debug copy SomeSettingDebug.xml deploydir/SomeSetting.xml
if MySql copy OtherSectionMySql.xml deploydir/OtherSetting.xml
答案 2 :(得分:1)
我们使用MyApp.config.template等文件模板和带有NAnt属性的MyWeb.config.template来获取环境之间不同的位。所以模板文件可能看起来像这样:
<MyAppConfig>
<DbConnString>${DbConnString}</DbConnString>
<WebServiceUri uri="${WebServiceUri}" />
</MyAppConfig>
在构建期间,我们通过循环遍历NAnt脚本中的每个环境来生成不同环境的所有配置,为每个环境更改NAnt属性$ {DbConnString}和$ {WebServiceUri}的值(实际上这些是所有设置在一个文件中,每个环境都包含部分),并使用扩展属性的选项进行NAnt复制。
花了一点时间来设置,但它已经花了我们至少十倍的时间节省了不同版本的配置文件。
答案 3 :(得分:1)
这2个问题可能会对您有所帮助:Utilizing machine.config和Managing app.config for large projects
答案 4 :(得分:0)
从微软模式和实践小组中查看prism框架?