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

时间:2020-03-06 14:19:40  来源:igfitidea点击:

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

但....

将许多配置节复制并粘贴到应用程序的.xml中非常繁琐。此外,对于倾向于在应用程序之间具有相似配置的共享组件,这意味着我们需要在多个.config文件中维护重复的设置。

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

我们使用什么技术来管理具有多个共享程序集的节的大型.NET .config文件?某种包含机制?定制配置阅读器?

跟进:

威尔的答案恰好是我所得到的,并且对于平坦的键/值对部分看起来很优雅。有没有一种方法可以将这种方法与自定义配置部分结合起来?

也感谢我们提供有关为不同的构建目标管理不同的.config的建议。这也很有用。

戴夫

解决方案

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

万一链接腐烂,我们要做的是为特定的配置部分指定configSource。这使我们可以在单独的文件中定义该特定部分。

<pages configSource="pages.config"/>

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

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

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

我的首选方法是使用MSBuild,如果右键单击项目并单击"卸载",将弹出一个新菜单选项,显示为" edit"。选择该选项,它将打开项目文件,以便我们可以对其进行编辑,向下滚动直到找到被注释掉的部分,称为" 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 Deployment Projects"的强大实用程序,它将允许我们轻松地管理所有这些内容,请单击此处

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

ScottGu对此发表了一篇不错的文章,并且效果很好。我们唯一的怪癖是,我们需要确保在每次构建之前从TFS中检出配置文件(web.config)进行编辑,以便可以将其复制过来。