21

假设一个大型复合应用程序构建在几个封装在它们自己的程序集中的基础组件上:(数据库读取、协议处理程序等)。对于某些部署,这可能包括 20 多个程序集。这些程序集中的每一个都具有设置或配置信息。我们的团队倾向于喜欢 VS 设置编辑器(以及它生成的易于使用的代码!),应用程序与用户的区别满足了我们的大部分需求。

但....

将许多配置部分复制并粘贴到我们应用程序的 .xml 中是非常乏味的。此外,对于跨应用程序往往具有相似配置的共享组件,这意味着我们需要在多个 .config 文件中维护重复的设置。

微软的 EntLib 使用外部工具来生成怪物 .config 文件解决了这个问题,但这也让人感觉很笨拙。

您使用哪些技术来管理包含来自多个共享程序集的部分的大型 .NET .config 文件?某种包含机制?自定义配置阅读器?

跟进:

Will 的答案正是我所得到的,并且对于平面键/值对部分看起来很优雅。有没有办法将此方法与自定义配置部分结合起来?

还感谢有关为不同构建目标管理不同 .configs 的建议。这也很有用。

戴夫

4

5 回答 5

20

您使用一个指向其他配置文件的主配置文件。 这是如何执行此操作的示例。


如果链接失效,您要做的是为特定配置部分指定configSource 。这允许您在单独的文件中定义该特定部分。

<pages configSource="pages.config"/>

这意味着在包含整个<pages />节点树的同一目录中有一个名为“pages.config”的文件。

于 2008-09-18T01:43:15.903 回答
9

我首选的方法是使用 MSBuild,如果您右键单击一个项目并单击“卸载”,则会弹出一个新的菜单选项,上面写着“编辑”。选择它,它将打开项目文件以便您可以编辑它,向下滚动直到找到一个名为“AfterBuild”的注释掉的部分。

然后,您可以添加如下内容:

<Target Name="AfterBuild">
    <Delete Files="$(TargetDir)$(TargetFileName).config" />
    <Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>

这将使用名为 [Release|Debug]app.exe.config 的应用程序配置替换应用程序配置。因此,您可以根据项目的构建方式维护单独的配置。

但是一个快速而肮脏的选择(如果您不想使用 msbuild)是只维护单独的配置文件,然后定义要包含的配置文件,如下所示:

<appSettings configSource="Config\appSettingsDebug.config"/>
<roleManager configSource="Config\roleManagerDebug.config"/>

如果你正在做一个 asp.net 应用程序,微软提供了一个很棒的实用程序,叫做“Web 部署项目”,它可以让你轻松管理所有这些,点击这里

于 2008-09-18T04:46:40.410 回答
4

管理大量配置的一种好方法是创建自定义配置部分。Phil Haack 在这篇文章中通过 3 个简单的步骤自定义配置部分很好地讨论了这一点

于 2008-09-18T02:57:52.603 回答
2

为每个部署/测试环境设置构建配置,并根据每个构建配置使用单独的配置文件。

ScottGu 有一篇关于这个的好帖子,效果很好。我们唯一的怪癖是我们需要确保在每次构建之前从 TFS 签出配置文件 (web.config) 以进行编辑,以便可以复制它。

于 2008-09-18T07:19:48.637 回答
1

我们创建了一个类似于 ConfigurationManager 的 AssemblySettingsConfig 类,但会为每个单独的程序集加载一个 .config。所以应用程序有一个 .config,它引用的任何 DLL 都有自己的 .config 文件。到目前为止效果很好。

于 2008-09-18T02:36:26.993 回答