用多个文件管理.NET配置内容
2010-04-03 08:44
204 查看
在开发实际的.NET应用程序,我们经常会用到.NET强大的应用程序配置功能(Application Configuration)。随着配置项的增多,配置文件也变得越来越长,而且非常不容易管理。另外,团队在协同开发时候,经常在不同的环境中需要不同的配置项或者同一个配置项需要设置成不同的值。比如,我们经常用"ConnectionStrings"来保存数据库连接字符串。可能每一个开发人员本地调试环境中的数据库连接字符串都不同。这样每次从源代码服务器上面同步配置文件后都需要重新修改里面的配置项值来支持本地调试。这篇博文就介绍怎样用多个文件管理.NET配置内容来方便我们日常的开发。
在app.config和web.config中只保留公共的、不经常变化的配置项目。这样能保证这个文件的基本稳定。
把和环境相关的配置项单独存放在一个独立的外部配置文件中,然后在主配置文件(app.config或者web.config)中引用该外部配置文件。例如,数据库连接字符串在"Staging"环境和"Product"环境中指向不同的数据库,我们就可以创建两个独立的外部配置文件"connectionstring_product.config" 和 "connectionstring_stage.config",并且把对应的数据库连接字符串值分别存在其中。
在使用.NET中的Application Setting功能时,把与此相关的配置项都放到一个独立的外部配置文件中,并在主配置文件中引用该外部配置文件。这是因为Application Setting相关配置项主要保存所有"setting"的默认值,经常会比较长,而且基本不会变化,把它存入一个独立的外部配置文件会比较方便我们日常对主配置文件的管理。
下面将具体说明怎样在主配置文件中引用外部配置文件。
.NET 1.1:在这个版本的.NET平台上,所有的配置项都在"<appsetting>"中。所以一个简单的方法是用"appSetting"的"file"属性来引用外部配置文件。如果外部配置文件存在,CLR就会读取外部配置文件并且用外部配置文件中的配置项值覆盖主配置文件中的配置项值。否则,CLR就直接使用主配置文件。
.NET 2.0:在.NET 2.0中,配置项有各个不同的"section"组织。如"<appSetting>" section、"<connectionstrings>" section,用户还可以自定义自己的section。但是,所有的section中只有"<appsetting>"还继续保留了"file"属性(也同样保留做file属性的融合和覆盖配置项的机制),别的"section"都没有该属性。幸运的是所有section(包括appsetting)都拥有一个新的属性"configSource"。但是"configsource"的工作机制和原来的"file"属性不相同。如果你对一个section设了"configSource"属性(引用一个外部配置文件),则该section的所有配置项都来自外部配置文件,你不能同时在主配置文件中该Section中再定义新的配置项。因为"configSource"属性没有原来"file"属性的融合和覆盖机制了。例如:
在主配置文件(app.config 或者 web.config)中:
MSDN:http://msdn.microsoft.com/en-us/library/ms229689%28VS.71%29.aspx
在开发团队中管理配置文件:http://codeclimber.net.nz/archive/2007/04/23/Managing-application-configurations-in-development-teams.aspx
Del.icio.us : Configuration File, 配置文件
基本原则
根据我个人的经验,配置文件(Configuration File)管理过程中一般遵循下面的原则:在app.config和web.config中只保留公共的、不经常变化的配置项目。这样能保证这个文件的基本稳定。
把和环境相关的配置项单独存放在一个独立的外部配置文件中,然后在主配置文件(app.config或者web.config)中引用该外部配置文件。例如,数据库连接字符串在"Staging"环境和"Product"环境中指向不同的数据库,我们就可以创建两个独立的外部配置文件"connectionstring_product.config" 和 "connectionstring_stage.config",并且把对应的数据库连接字符串值分别存在其中。
在使用.NET中的Application Setting功能时,把与此相关的配置项都放到一个独立的外部配置文件中,并在主配置文件中引用该外部配置文件。这是因为Application Setting相关配置项主要保存所有"setting"的默认值,经常会比较长,而且基本不会变化,把它存入一个独立的外部配置文件会比较方便我们日常对主配置文件的管理。
下面将具体说明怎样在主配置文件中引用外部配置文件。
具体实现
由于.NET 1.1和.NET 2.0中的配置文件管理机制不一致,我将分开讨论它们:.NET 1.1:在这个版本的.NET平台上,所有的配置项都在"<appsetting>"中。所以一个简单的方法是用"appSetting"的"file"属性来引用外部配置文件。如果外部配置文件存在,CLR就会读取外部配置文件并且用外部配置文件中的配置项值覆盖主配置文件中的配置项值。否则,CLR就直接使用主配置文件。
.NET 2.0:在.NET 2.0中,配置项有各个不同的"section"组织。如"<appSetting>" section、"<connectionstrings>" section,用户还可以自定义自己的section。但是,所有的section中只有"<appsetting>"还继续保留了"file"属性(也同样保留做file属性的融合和覆盖配置项的机制),别的"section"都没有该属性。幸运的是所有section(包括appsetting)都拥有一个新的属性"configSource"。但是"configsource"的工作机制和原来的"file"属性不相同。如果你对一个section设了"configSource"属性(引用一个外部配置文件),则该section的所有配置项都来自外部配置文件,你不能同时在主配置文件中该Section中再定义新的配置项。因为"configSource"属性没有原来"file"属性的融合和覆盖机制了。例如:
在主配置文件(app.config 或者 web.config)中:
<connectionStrings> <add name="subtextData" connectionString="Server=localhost;Database=SubtextData;Trusted_Connection=True;" /> </connectionStrings>
更多资源
关于.NET的配置文件管理你可以参考下面的资源:MSDN:http://msdn.microsoft.com/en-us/library/ms229689%28VS.71%29.aspx
在开发团队中管理配置文件:http://codeclimber.net.nz/archive/2007/04/23/Managing-application-configurations-in-development-teams.aspx
Del.icio.us : Configuration File, 配置文件
相关文章推荐
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- 用多个文件管理.NET配置内容
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- 一步步学习SPD2010--附录C--使用SP2010管理任务(6)--配置外部内容类型配置文件页面宿主
- .net 对配置文件内容的操作
- .NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理
- 一步步学习SPD2010--附录C--使用SP2010管理任务(6)--配置外部内容类型配置文件页面宿主
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架- 5.4平台日志、异常管理、生成自动升级配置文件模块
- resin-admin.xml文件内容,这个管理程序用的是php,因此可以看看php程序的配置。
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架- 5.4平台日志、异常管理、生成自动升级配置文件模块
- .Net配置文件——统一节点配置管理
- .NET 获得指定XML配置文件内容
- .Net配置文件——统一节点配置管理
- .Net 配置文件的编程
- ansible-管理nginx配置文件
- linux和windows互传文件 、用户配置文件和密码配置文件、用户组管理、用户管理
- 打印配置文件nginx.conf内容的行号及内容和开机启动软件设置和查看配置文件总行数
- 【开源.NET】 分享一个前后端分离的轻量级内容管理框架
- 64位系统 IIS7.0配置.net网站时报错:未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。