65.9K
CodeProject 正在变化。 阅读更多。
Home

自定义 app.config

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (25投票s)

2005 年 3 月 29 日

2分钟阅读

viewsIcon

344834

downloadIcon

4595

一个自定义配置类,用于从外部文件加载配置设置。

引言

本文档描述了如何像 app.config 文件一样从配置文件中读取信息,包括有关链接外部文件、使用自定义配置节处理程序、节和节组的信息。

背景

我查看了许多构建从首选项节到仅仅构建从 XML 读取类似 appSettings 的节的文章。我真正需要的是一种将设置移入和移出 app.config 文件的方法。它需要完成两个非常具体的事情,而其他方法都没有做到。首先,我需要它使用自定义配置节处理程序,其次,我需要它根据程序集名称来假定文件名,因为我不想跟踪文件名。

使用代码

该代码的使用方式与 .NET 中的 System.ConfigurationSettings 类完全相同,只是来自不同的命名空间。

string val = 
  CustomConfigurationSettings.ConfigurationSettings.AppSettings["myTestKey"];

这是使用它的最简单方法。以这种方式使用它假定一个名为 assemblyname.dll.configexecutable.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 设置父上下文,将两组信息合并到节处理程序中,这并不难。

© . All rights reserved.