4

我们有一套相互关联的 .Net 3.5 应用程序。有些是网站,有些是 Web 服务,有些是 Windows 应用程序。每个应用程序当前都有自己的配置文件(app.config 或 web.config),并且由于多个应用程序需要相同的配置值,因此当前配置文件中有一些重复的键(目前手动保持同步)。此外,这套应用程序部署在各种环境(开发、测试、实时等)中

从单个配置源管理这些多个应用程序的配置的最佳方法是什么,以便可以在需要时在多个应用程序之间共享配置值?我们还希望为每个环境提供单独的配置(因此在部署时您不必手动更改特定于环境的某些配置值,例如连接字符串),但同时不想维护多个大型配置文件(每个环境一个),因为在添加新配置键时保持同步会很麻烦。

4

5 回答 5

7

Visual Studio 有一个相对晦涩的功能,可以让您将现有项目添加为链接,这应该可以完成您正在寻找的内容。查看Derik Whittaker关于此主题的帖子以获取更多详细信息。

Visual Studio 确实应该使这个选项更加明显。没有人真正想过点击“添加”按钮旁边的那个小箭头。

于 2008-09-18T20:07:19.463 回答
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。例如:

if debug copy SomeSettingDebug.xml deploydir/SomeSetting.xml
if MySql copy OtherSectionMySql.xml deploydir/OtherSetting.xml
于 2008-09-18T20:18:11.840 回答
1

我们使用具有 NAnt 属性的文件模板(例如 MyApp.config.template 和 MyWeb.config.template)来处理环境之间不同的位。所以模板文件可能看起来有点像这样:

<MyAppConfig>
    <DbConnString>${DbConnString}</DbConnString>
    <WebServiceUri uri="${WebServiceUri}" />
</MyAppConfig>

在构建期间,我们只需在 NAnt 脚本中循环遍历每个环境,更改每个环境的 NAnt 属性 ${DbConnString} 和 ${WebServiceUri} 的值(实际上这些都设置在单个文件,其中包含每个环境的部分),并使用打开属性的选项进行 NAnt 复制。

设置花了一点时间,但它至少为我们节省了十倍的时间来处理不同版本的配置文件。

于 2008-09-18T20:19:27.000 回答
1

这 2 个问题可能会对您有所帮助:利用 machine.config为大型项目管理 app.config

于 2008-09-19T04:27:35.547 回答
0

查看 Microsoft 模式和实践组的 prism 框架?

于 2008-09-18T20:10:08.083 回答