关于c#:如何管理大型应用程序的.NET app.config文件?

关于c#:如何管理大型应用程序的.NET app.config文件?

How do you manage .NET app.config files for large applications?

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

但....

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

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

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

跟进:

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

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

戴夫


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

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

1
<pages configSource="pages.config"/>

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


我的首选方法是使用MSBuild,如果右键单击项目并单击"卸载",将弹出一个新菜单选项,显示为" edit"。选择该选项,它将打开项目文件,以便您可以对其进行编辑,向下滚动直到找到被注释掉的部分,称为" AfterBuild"。

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

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

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

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

1
2
<roleManager configSource="Config
oleManagerDebug.config"
/>

如果您正在做一个asp.net应用程序,Microsoft提供了一个称为" Web Deployment Projects"的强大实用程序,它将使您轻松管理所有这些操作,请单击此处。


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


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

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


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


推荐阅读

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    下载文件的命令linux?

    下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

    linux命令文件传输?

    linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

    linux的建立文件命令?

    linux的建立文件命令?,名称,系统,时间,名字,命令,文件夹,位置,密码,不了,文

    linux06文件命令?

    linux06文件命令?,数字,系统,工作,第一,名字,信息,管理,文件,目录,命令,linux

    linux将文件备份命令?

    linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,L

    linux扩展文件命令?

    linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

    linux命令新增文件夹?

    linux命令新增文件夹?,系统,名字,首次,名称,新增,文件,命令,文件夹,地址,密

    linux推送文件命令?

    linux推送文件命令?,地址,系统,情况,工作,命令,文件,电脑,密码,信息,目录,Lin

    linux文件替换命令行?

    linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批

    linux可生成文件命令?

    linux可生成文件命令?,名字,命令,名称,文件,文件夹,位置,数据,密码,时间,电