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

应用程序和组件配置

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.31/5 (12投票s)

2003年3月29日

4分钟阅读

viewsIcon

147647

downloadIcon

2112

通过 XML .config 文件进行应用程序和组件配置。

Sample Image - app_config.jpg

Sample Image - app_config1.jpg

引言

.NET Framework 提供了丰富的配置 API,它对独立桌面应用程序和 Web 应用程序都保持一致。本文简要讨论了在 .NET 中使用独立应用程序示例进行 XML 应用程序配置。

背景

大多数应用程序需要一些配置参数,这些参数代表持久的用户偏好(如收藏列表)或环境信息,如数据库连接字符串或 DSN。在 .Net 之前的 Windows 应用程序通常将此类信息存储在“ini”文件中,允许应用程序在每个部分下指定具有名称-值对的许多配置选项的高级部分。这种数据格式可以很容易地表示两级信息,但不够灵活。没有可能将格式扩展到包含三级、四级或n级信息。

.Net framework 包含配置功能,可以在运行时自动加载应用程序的配置,而无需程序员干预。对于名为 blah.exe 的独立应用程序,必须将配置文件命名为 blah.exe.config,并且在运行 blah.exe 时,框架将自动加载和解析配置文件。 .config 文件格式是 XML,此处指定。 使用 XML 的好处是格式灵活,允许开发人员指定自己的配置节名称,将节嵌入到其他节中,达到任何有用的级别,格式整洁易读,同时还提供 XPath 风格的配置查询接口(请参阅 W3C 的 XPath 规范),允许程序员简单地访问复杂文档中的特定设置。

.Net 配置系统功能强大,允许配置应用程序的所有部分,包括强制特定版本的运行时、远程配置、加密提供程序和网络。本文仅探讨与应用程序数据相关的配置设置。

示例配置文件

可以定义自定义节和节组,其中可以放入名称-值对。 `System.Configuration` 命名空间中定义了几个处理程序类型。我选择使用 `NameValueSectionHandler` 来管理我的应用程序的设置。

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <!-- Register the "settings" section group and it's "font" and "database" 
sections.--> <configSections> <sectionGroup name="settings"> <section name="font"
type="System.Configuration.NameValueSectionHandler,
System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089,
Custom=null"/> <section name="database"
type="System.Configuration.NameValueSectionHandler, System,
Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, Custom=null"/> </sectionGroup> </configSections> <settings> <font> <add key="family" value="Verdana" /> <add key="size" value="18" /> <add key="bold" value="false" /> </font> <database> <add key="dsn"
value="Initial Catalog=Northwind;Data Source=localhost;
Integrated Security=SSPI;" /> <add key="sqlserver" value="true" /> </database> </settings> </configuration>

文档的根元素必须始终是 `<configuration>` 元素。第二个 `<configSections>` 元素向框架描述如何处理后续节点并使其对程序员可用。节组表示一个将包含自定义节元素的元素。节表示一个将包含实际配置信息以及信息如何组织的元素。

代码示例

现在我们有了一个包含一些简单字体和数据库配置数据的配置文件,让我们在应用程序中读取这些设置。使用框架中的两个类 `System.Configuration.ConfigurationSettings` 和 `System.Collections.Specialized.NameValueCollection`,这对于上面指定的示例配置文件来说非常简单。

// Font settings are represented by name-value pairs.  
//The font settings are located with an XPath expression.
NameValueCollection fontConfig = (NameValueCollection)
ConfigurationSettings.GetConfig("settings/font"); // Configure the mandatory font family. if(fontConfig["family"] == null) { throw(new ConfigurationException("Mandatory font family setting not found.")); } else { fontFamilyTextBox.Text = fontConfig["family"]; }

`ConfigurationSettings.GetConfig` 静态方法使用 XPath 查询符号查找 `<configuration>` 元素下的元素。“settings/font”表示根元素 `<configuration>` 下 `<settings>` 元素下的 `<font>` 元素。这将返回一个 `NameValueCollection`,从中可以使用字符串索引器查找设置,如上所示,使用设置的名称查找相应的值。配置中不存在的设置将从 `NameValueCollection` 索引器返回 null。值将作为字符串返回。

本文包含的示例应用程序查询配置文件中的字体和数据库设置,并将值放入 GUI 组件中。尝试修改配置文件,更改值,注释掉一些配置设置,然后重新运行演示程序,看看它如何响应这些更改。本文随附的源代码项目演示了如何指定一些必需参数和一些可选参数,为缺失的可选参数设置默认值,并显示必需参数的错误消息。它还显示了一些值转换为数字和布尔结构,但您肯定已经知道如何做到这一点。 ;-)

配置的可能性要广泛得多,包括编写自己的设置验证器和加载器类,例如 log4net 软件附带的类。文档暗示可以更改加载的配置并保存更改,但我还没有认真尝试找出如何做到这一点。也许以后会有另一篇文章介绍这个。

分享和享受。

© . All rights reserved.