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

时间:2008-09-18 01:40:40

标签: c# .net configuration

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

但....

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

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

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

随访:

Will answer正是我所得到的,并且对于平键/值对部分看起来很优雅。有没有办法将这种方法与custom configuration sections结合起来?

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

戴夫

5 个答案:

答案 0 :(得分:20)

您使用一个指向其他配置文件的主配置文件。 Here's an example of how to do this.


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

<pages configSource="pages.config"/>

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

答案 1 :(得分: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应用程序,Microsoft提供了一个名为“Web部署项目”的强大工具,可以让您轻松管理所有这些,click here

答案 2 :(得分:4)

管理大型配置集的一个好方法是创建自定义配置节。 Phil Haack在本文Custom configuration sections in 3 easy steps

中非常好地讨论了这个问题

答案 3 :(得分:2)

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

ScottGu有a nice post关于此问题并且效果很好。我们唯一的怪癖是我们需要确保在每次构建之前检查配置文件(web.config)以便从TFS进行编辑,以便可以复制它。

答案 4 :(得分:1)

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