自定义 app.config






4.67/5 (25投票s)
2005 年 3 月 29 日
2分钟阅读

344834

4595
一个自定义配置类,用于从外部文件加载配置设置。
引言
本文档描述了如何像 app.config 文件一样从配置文件中读取信息,包括有关链接外部文件、使用自定义配置节处理程序、节和节组的信息。
背景
我查看了许多构建从首选项节到仅仅构建从 XML 读取类似 appSettings
的节的文章。我真正需要的是一种将设置移入和移出 app.config 文件的方法。它需要完成两个非常具体的事情,而其他方法都没有做到。首先,我需要它使用自定义配置节处理程序,其次,我需要它根据程序集名称来假定文件名,因为我不想跟踪文件名。
使用代码
该代码的使用方式与 .NET 中的 System.ConfigurationSettings
类完全相同,只是来自不同的命名空间。
string val =
CustomConfigurationSettings.ConfigurationSettings.AppSettings["myTestKey"];
这是使用它的最简单方法。以这种方式使用它假定一个名为 assemblyname.dll.config 或 executable.exe.config 的配置文件,实际上它只是获取程序集的输出文件名并添加 .config 后缀。该文件应与程序集位于同一目录中。它支持 .NET 中所有支持 IConfigurationSectionHandler
接口的内置类,并使用它们读取配置文件的所有节。它还支持像 app.config 一样使用外部文件进行 appSettings
配置。
<appSettings file="filename.config">
<add key="test" value="myTest"/>
</appSettings>
如果您不想使用 appSettings
节,或者想要使用与假定的不同的文件名,它的工作方式与 System.ConfigurationSettings
类完全相同,除了 ConfigurationSettings.GetConfig
被重载以支持传递任何格式与 app.config 匹配的文件名。
//Include whatever file name that you want for the second parameter
NameValueCollection values = (NameValueCollection)
CustomConfigurationSettings.ConfigurationSettings.GetConfig("myconfigSection",
"myConfig.config");
string val = values["myTestKey"];
关注点
加载 AppSettings
的外部文件看起来会很容易,只需使用 NameValueFileSectionHandler
就可以了,对吧?但事实并非如此!它始终返回 null
。我使用 Reflector 查看了它的内部工作方式,看起来很简单,但它使用了一个标记为 internal
的类,所以我无法使用它来重现代码。仅仅获取文件名并自行加载,然后使用我在第一个文件上使用的相同逻辑,然后为 NameValueSectionHandler
设置父上下文,将两组信息合并到节处理程序中,这并不难。