如何管理大型应用程序的.NET app.config文件?

21
假设一个大型组合应用程序是由几个基础组件构建而成,这些组件被打包在自己的程序集中:(数据库读取、协议处理等)。对于某些部署,这可能包括超过20个程序集。每个程序集都有设置或配置信息。我们团队倾向于使用VS设置编辑器(和它生成的易于使用的代码!),应用程序与用户的区别满足我们的大多数需求。
但是...将许多配置部分复制粘贴到我们的应用程序.xml中非常繁琐。此外,对于共享组件,它们 tend to have similar configurations across applications,这意味着我们需要在多个.config文件中维护重复的设置。
Microsoft's EntLib通过外部工具解决了这个问题,以生成monster .config文件,但这也感觉很笨重。
你使用什么技术来管理带有来自多个共享程序集的部分的大型.NET .config文件?一种包含机制?自定义配置阅读器?
跟进:
Will的answer正是我想表达的,对于平面键/值对部分看起来很优雅。是否有一种方法将此方法与custom configuration sections相结合?
谢谢您提供有关管理不同.build目标的不同.configs的建议。这也非常有用。
戴夫
5个回答

20

您可以使用一个主配置文件来指向其他配置文件。这里是如何实现的示例。


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

<pages configSource="pages.config"/>

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


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部署项目(Web Deployment Projects)”,它可以让你轻松地管理所有这些,点击这里


对于使用 ClickOnce 的用户:根据我的经验,这个解决方案(虽然很好)与 ClickOnce 不太兼容。 - stakx - no longer contributing

4

2
为每个部署/测试环境设置构建配置,并根据每个构建配置使用单独的配置文件。ScottGu在他的博客中详细介绍了这一点,这很有效。唯一需要注意的是,在每次构建之前,我们需要确保从TFS检出配置文件(web.config)以便复制。请注意保留HTML标签。

1
我们创建了一个名为AssemblySettingsConfig的类,它类似于ConfigurationManager,但会为每个独立的程序集加载一个.config文件。因此应用程序有一个.config文件,而它引用的任何DLL都有自己的.config文件。到目前为止,这种方法效果不错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接