`
yidongkaifa
  • 浏览: 4061107 次
文章分类
社区版块
存档分类
最新评论

.Net 2.0 中配置文件的读写(转)

 
阅读更多

转自:http://blog.joycode.com/ghj/archive/2006/02/10/71293.aspx
在基于 .net 2.0 的企业库中,原来的配置应用程序块被废除了,使用了 .net 2.0 自带的读写配置功能,下面我们就来看看 .net 2.0 中读写配置的功能。

即: ConfigurationManager 类

注意:
ConfigurationManager 是处理客户端应用程序配置文件的首选方法;不推荐使用任何其他方法。
对于 Web 应用程序,建议使用 WebConfigurationManager 类。

这个类的 AppSettings 属性 在以前1.0 的时候,就有了, 2.0 中增加了 ConnectionStrings 属性。
这些都不是今天我们要探讨的内容,我们今天要探讨的内容,是把一个配置类保存到配置文件中,以及把这个配置类从配置文件中实例化出来。

这个配置类,必须是 派生自
System.Configuration.ConfigurationSection 类

如下面的类就是一个配置类

using System.Text;
using System.Configuration;
namespace ConfigTest
{
class ConfigDataClass : ConfigurationSection
{
public ConfigDataClass()
{ }

[ConfigurationProperty("id")]
public int ID{
get{return (int)this["id"];}
set{ this["id"] = value;}
}

[ConfigurationProperty("name")]
public string Name{
get{ return this["name"].ToString();}
set{ this["name"] = value;}
}

public override string ToString(){
StringBuilder info = new StringBuilder();
info.AppendFormat("id = {0};name = {1}", ID, Name);
return info.ToString();
}
}
}

先说如何把这个配置类更新到配置文件中

// 配置信息类初始化
ConfigDataClass configData = new ConfigDataClass();
configData.ID = 100;
configData.Name = "我是谁?";

// 打开当前文件的配置文件
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// 干掉原先的配置
config.Sections.Remove("SettingsData");
// 把新的配置更新上去
config.Sections.Add("SettingsData", configData);
// 保存配置文件
config.Save();

MessageBox.Show(configData.ToString());

读取配置信息

ConfigDataClass configData = ConfigurationManager.GetSection("SettingsData") as ConfigDataClass;
if (configData == null) return;
MessageBox.Show(configData.ToString());

当文件修改的时候,自动从新登录配置文件需求

这个更简单,只需要使用一个 System.IO.FileSystemWatcher 对象即可
private FileSystemWatcher watcher;

在初始化的时候,订阅文件改变事件。

// Initialize file system watcher
watcher = new FileSystemWatcher(AppDomain.CurrentDomain.BaseDirectory);
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.EnableRaisingEvents = false;

然后在 watcher_Changed 方法中,

private void watcher_Changed(object sender, FileSystemEventArgs e)
{
if (e.FullPath.ToLower().Contains(".config"))
{
for (int i = 0; i < 3; i++)
{
try
{
// Using the static method, read the cached configuration settings
ConfigurationManager.RefreshSection("EditorSettings");
break;
}
catch (ConfigurationErrorsException)
{
if (i == 2) throw;
else Thread.Sleep(100);
}
}
}
}

显然,上述的功能已经能满足我们的需求了,所以企业库才废弃了之前的配置管理应用程序块。

WEB 下配置文件的读写跟 客户端应用程序配置文件 下 对配置文件的读写,几乎完全是一样的。只不过 , web.config 有多重继承的问题。
子网站目录下如果没配置,会继承自上级目录。依次类推,这是一个多层继承的问题。

同样是上篇 Blog 的配置类 ,我们下面来看看 Web 下的读写操作
using System.Web.Configuration;

写操作:
卸载掉原来节,新增节来写操作
ConfigDataClass configData = new ConfigDataClass();
configData.ID = 100;
configData.Name = "我是谁?";
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
config.Sections.Remove("SettingsData");
config.Sections.Add("SettingsData", configData);
config.Save();

在原来节基础上的修改操作
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
ConfigDataClass configData = config.GetSection("SettingsData") as ConfigDataClass;
configData.ID = 1003;
configData.Name = "我";
config.Save();

读操作:
ConfigDataClass configData = ConfigurationManager.GetSection("SettingsData") as ConfigDataClass;
if (configData == null) return string.Empty;
return configData.ToString();

从上面我们可以看到
除了
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
这一行代码 和 引用的 名称空间 using System.Web.Configuration; 不同外,Web 程序跟 客户端应用程序完全是一样的代码。

不论是 Web 程序,还是 客户端应用程序,有时候,一个配置文件是不够的,我们可能需要多个配置文件,下面我们就看看如何对其他配置文件当系统默认的配置文件来读写。
注意,我们这时候用的是 System.Configuration.Configuration 类,不论 Web 程序,还是 客户端应用程序 都可以用这个类。

更新指定的另外配置文件
ConfigurationFileMap fileMap = new ConfigurationFileMap();
fileMap.MachineConfigFilename = @"D:/My2005Codes/WebTestCode/TestWEBSite/aa.config";
System.Configuration.Configuration config = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);

ConfigDataClass configData = new ConfigDataClass();
configData.ID = 303;
configData.Name = "CSDN?";

config.Sections.Remove("SettingsData");
config.Sections.Add("SettingsData", configData);
config.Save();

在写操作之前,这个配置文件可以没有上述配置节,但是必须有下面几行信息,否则就会报没有根节点。
<!--?xml version="1.0"?-->

完成写操作后,这个 aa.config 文件就变成了

<!--?xml version="1.0"?-->




读取指定的另外配置文件

ConfigurationFileMap fileMap = new ConfigurationFileMap();
fileMap.MachineConfigFilename = @"D:/My2005Codes/WebTestCode/TestWEBSite/aa.config";
System.Configuration.Configuration config = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);

ConfigDataClass configData = config.GetSection("SettingsData") as ConfigDataClass;
if (configData == null) return string.Empty;
return configData.ToString();

如果是 客户端应用程序,你还可以 通过使用 System.Configuration.ConfigurationManager.OpenMappedExeConfiguration 读写多个客户端应用程序默认配置文件。

当然这些功能完全可以用类的序列化,反序列化来用,但是既然有这个功能,干么不用呢?

Comments
分享到:
评论

相关推荐

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    AdFile.xml AdRotator配置文件。 7-08.aspx 使用Calendar控件创建日历。 第8章(\Chapter 08) 示例描述:本章学习用户控件和自定义控件。 uc1.ascx 用户控件实现搜索框。 8-01.aspx 用户控件的调用。 uc2...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    内容简介回到顶部↑本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合...

    1.ASP.NET.2.0.XML.高级编程(第3版) [1/3]

    XML和ADO.NET\r\n第9章 显示XML数据 \r\n第10章 SQL Server 2005的XML集成 \r\n第11章 使用ASP.NET 2.0和SQL Server 2005构建飞机订票系统 \r\n第12章 XML串行化 \r\n第13章 XML Web服务\r\n第14章 ASP.NET 2.0配置 ...

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

    零基础学ASP.NET 2.0&源代码绝对完整版1

    AdFile.xml AdRotator配置文件。 7-08.aspx 使用Calendar控件创建日历。 第8章(\Chapter 08) 示例描述:本章学习用户控件和自定义控件。 uc1.ascx 用户控件实现搜索框。 8-01.aspx 用户控件的调用。 uc2....

    asp.net知识库

    革新:.NET 2.0的自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建...

    中美 IT 培训 C# Asp.net 全套笔记1

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    中美 IT 培训 C# Asp.net 笔记3

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    中美 IT 培训 C# Asp.net 笔记2

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    知了串口调试精灵(PC,CE,WM通用)

    知了串口调试精灵 特色 1.支持所有Windows平台,包括WinXP,Vista,Win7,WM,WinCE(基于.NetFrameWork,代码基于.Net2.0,新建...ini格式配置文件读写 COM串口操作 十六进制格式字符串与字节数组之间的转换 正则表达式运用

    值类型与引用类型理论内容.part01.rar

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    值类型与引用类型理论内容.part05.rar

    详细讲授远程处理(Remoting)技术,包括基本远程处理框架,配置文件及其应用, 异步远程处理技术,租约和生存期控制;系统地讲授Windows服务编程、Com+ 服务、WSE2.0的使用。 掌握 Socket 编程、TCP、 UDP编程、...

    新闻管理系统(asp.net)

    在\"虚拟目录\"选项卡中点击\"配置\",在打开的\"应用程序配置\"窗口中点击\"添加\",在可执行文件里边填写处理aspx文件的Dll文件路径,一般为c:\\windows\\microsoft.net\\framework\\v2.0.50727\\aspnet_isapi.dll,...

    亮剑.NET深入体验与实战精要2

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    数据库底层操作与配置V2.0.rar

    并且操作简便 三、可执行存储过程 四、结全配置文件生成器可动态地生成配置文件和CONFIG.DLL类,通过CONFIG.DLL可实现对配置文件的读写操作,适用于对配置文件操作不熟悉的程序员 &lt;br/&gt;使用方法: 1...

    .net技术资料大全(语言规范 源码教程 学习笔记 技术资料 .net代码生成器)

    win2003中配置msdtc.txt word导出.txt 保证应用程序只有一个实例运行.txt 编辑字段中的word文件.txt 编码标准.txt 播放声音.txt 捕捉DataGrid的双击事件(C#版本).txt 不显示窗口后台运行程序.txt 储存过程....

    亮剑.NET深入体验与实战精要3

    8.2.1 安装ASP.NET 2.0 Ajax Extensions 333 8.2.2 创建ASP.NET Ajax应用程序 333 8.2.3 ScriptManager控件使用技巧 335 8.2.4 UpdaetPanel控件使用技巧 336 8.2.5 AsyncPostBackTrigger实现 外部控件引发局部刷新...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 1.2.4 ASP.NET4 1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目 2.1.2 创建无项目文件的网站 2.1.3 设计网页 2.2...

Global site tag (gtag.js) - Google Analytics