`

.NET 2.0中配置文件的操作介绍

阅读更多

1工具介绍

子曾经曰过:工欲善其事,必先利其器(《论语·魏灵公》)。

先来介绍工具——一个全世界.NET编程人员必备的工具——掌声有请Lutz RoederReflector!(热烈的掌声,啪啪啪…….)。软件下载地址:http://www.aisto.com/roeder/dotnet/

这是一个超级伟大的软件,有了它,整个.NET基础类库就等于是开源的了。

界面截图如下:

1 Reflector界面

2.配置文件概述

配置文件能使我们开发的软件具有较强的适应性和更大的灵活性,windows下的配置技术有.ini文件、注册表等,现在在.NET开发平台下,推荐使用基于XML.config配置文件。.config文件分成两大类,一类服务于web程序,文件名:web.config;另一类服务于windows应用程序,文件名:***.exe.config(其中***代表可执行文件的名称)。

下面分别讲授这两种文件的操作。

3.web程序的配置文件

3.1 web程序的配置文件的组成

ASP.NET开发中主要用到的.config文件有两个:machine.configweb.config。其中machine.config对于整个服务器来说,具有全局性的特点,我们一般不去改变其设置。Web.config则对应于每个web程序本身。先看一个典型的web.config文件:

<?xml version="1.0"?>

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<appSettings>

<add key="message" value="Hello World!" />

</appSettings>

<connectionStrings>

<add name="AdventureWorks" connectionString="..."/>

<add name="pubs" connectionString="..."/>

</connectionStrings>

<system.web>

<compilation debug="true" />

<authentication mode="Windows"/>

<identity impersonate="true"/>

</system.web>

</configuration>

这个web.config文件中,我们可以看到三个节(section):appSettingsconnectionStringssystem.web。其中appSettings节其实就完成了我们以前用.ini文件的功能。不过它功能更强,可以对其中的元素进行加密(后面讲)。connectionStrings节用于配置数据库连接。

3.2 对配置文件的常见操作

对于配置文件的常见操作包括:

l 读取

l 修改

l web.config中的配置节放在单独的文件中

l 对某一节进行加密

l 添加定制的节

操作web配置文件(包括machine.configweb.config等)的命名空间是:System.Web.Configuration。主要应用的类是:WebConfigurationManager。下面看看WebConfigurationManager类的成员。(可以利用MSDN来查看,我下面是利用Lutz RoederReflector

1 WebConfigurationManager类成员

3.2.1 读取

2WebConfigurationManager类中用于读取的属性和方法

3.2.1.1 读取appSettings节和connectionStrings

WebConfigurationManager类中,我们首先注意到其两个属性AppSettingsConnectionStrings。这两个属性就是用于操作我们前面看到的web.config文件中的两节appSettingsconnectionStrings。下面演示使用方法。

演示操作appSettings节的代码:

using System.Web.Configuration;

....

string message;

message = WebConfigurationManager.AppSettings["message"];

...

演示操作connectionStrings节的代码:

using System.Web.Configuration;

....

string connectionString =

WebConfigurationManager.ConnectionStrings["pubs"].ConnectionString;

...

3.2.1.2 读取其它节

.NET中读取其它节要麻烦一些。我们需要利用GetSection()函数。GetSection()函数的作用是从当前web应用程序的配置文件中检索指定的配置节。GetSection()函数有2个重载,我们这里介绍GetSection(string sectionName)。这个函数参数sectionName是用于查找节点的XPath表达式(对于XPath表达式的了解请参阅其它资料)。这里我们首先需要知道的是在.NET中所有配置节都对应一个类,譬如上面我们看到的web.config文件中,appSettings节对应于AppSettingsSection类,而connectionStrings对应于ConnectionStringsSection类。利用Lutz RoederReflector我们可以很容易的知道所有的section类。见下图。

3  继承于ConfigurationSection类的各section

从中我们查找到compilation节对应于System.Web.Configuration. CompilationSection 类,authentication节对应于System.Web.Configuration.AuthenticationSection类,identity节对应于System.Web.Configuration.IdentitySection类,等等。

例子1

protected void readImpersonationButton_Click(object sender, EventArgs e)

{

IdentitySection section;

section = WebConfigurationManager.GetSection("system.web/identity")

as IdentitySection;

if (section != null)

{

WriteMessage("Impersonate = " + section.Impersonate);

}

}

private void WriteMessage(string message)

{

//在页面上添加一个名为messagePlaceHolderPlaceHolder控件

HtmlGenericControl generic = new HtmlGenericControl();

generic.InnerHtml = message;

messagePlaceHolder.Controls.Add(generic);

}

上面例子中的XPath表达式system.web/identity相信大家都能猜出来是什么意思。而至于IdentitySection类到底有什么成员则需要利用Lutz RoederReflector查找或MSDN查找。

例子2:(MSDN上的例子)此示例演示一个可从 Web 应用程序或控制台应用程序访问的节。

// Show the use of GetSection(string).

// It gets the connectiobStrings section.

// If called from within a client application,

// the GetSection(string) gets the default connectionStrings

// section from the machine.config.

// If called from within a Web aplication it gets the

// section from the configuration file located at the

// application current level.

static void GetSection1()

{

// Get the connectionStrings section.

ConnectionStringsSection connectionStringsSection =

WebConfigurationManager.GetSection("connectionStrings")

as ConnectionStringsSection;

// Get the connectionStrings key,value pairs collection.

ConnectionStringSettingsCollection connectionStrings =

connectionStringsSection.ConnectionStrings;

// Get the collection enumerator.

IEnumerator connectionStringsEnum =

connectionStrings.GetEnumerator();

// Loop through the collection and

// display the connectionStrings key, value pairs.

int i = 0;

Console.WriteLine("[Display the connectionStrings]");

while (connectionStringsEnum.MoveNext())

{

string name = connectionStrings[i].Name;

Console.WriteLine("Name: {0} Value: {1}",

name, connectionStrings[name]);

i += 1;

}

Console.WriteLine();

}

MSDN上还有其它几个例子可以参考。

3.2.2 修改

  从图2我们可以看到还有几个静态函数OpenWebConfiguration()OpenMachineConfiguration()等,就是用来打开一个配置文件(分别对应于web.configmachine.config)修改更新配置项的。

例子:把system.web项下的compilation修改(false->true;或true->false)。

protected void toggleDebugButton_Click(object sender, EventArgs e)

{

Configuration config;

config = WebConfigurationManager.OpenWebConfiguration("~");

CompilationSection compilation;

compilation = config.GetSection("system.web/compilation")

as CompilationSection;

if (compilation != null)

{

compilation.Debug = !compilation.Debug;

config.Save();

WriteMessage("Debug setting is now: " + compilation.Debug);

}

}

修改的注意点:

1. 必须对该文件有修改的权限,通常NETWORK SERVICEASPNET账户对文件和目录没有修改权限。

2. ASP.NET在运行时,Runtime时刻注视着web.config文件的变化,一旦该文件修改了,整个应用程序就创建一个新的实例,并重新加载。如果频繁的修改web.config文件,对程序性能影响比较大。

3. 如果需要频繁修改配置,则应把该配置节放到单独的文件中。

3.2.3 web.config中的配置节放在单独的文件中

我们可以把任意一个配置节(section)放入一个独立的文件中。把web.config中的配置节放在单独的文件中的优点,等一下再说。先看看怎么做。采用本文开始的例子,分解如下。

例子:

web.config文件

<?xml version="1.0"?>

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<appSettings configSource="appSettings.config"/>

<connectionStrings configSource="connections.config"/>

<system.web>

<compilation debug="true" />

<authentication mode="Windows"/>

<identity impersonate="true"/>

</system.web>

</configuration>

appSettings.config文件:

<appSettings>

<add key="message" value="Hello World!"/>

</appSettings>

connections.config件:

<connectionStrings>

<add name="AdventureWorks" connectionString="..."/>

<add name="pubs" connectionString="..."/>

</connectionStrings>

利用外部配置文件的好处:

1. 可以根据不同的环境而设置不同的配置,譬如开发环境、测试环境、正式环境配置不同的数据库连接。

2. 权限管理。例如,可以锁住web.config不让某些人修改,而只让其用于修改appSettings.config文件的权限。

3. 利用外部配置文件,还可以控制当其修改后应用程序是否重启。一般,当我们修改了web.config文件时,应用程序就产生一个新的实例并重启。而如果是单独的配置文件,则可以控制重启与否。

配置方法:在machine.config中配置。Machine.config文件一般在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG目录下。打开machine.config文件,截图如下:

4 machine.config文件内容截图

从图4我们可以看到在有的元素中有restartOnExternalChanges属性。如果设为false,则外部文件修改后不重启,如果设为true,则重启。

3.2.4 对某一节进行加密

.NET2.0中加密某一节(section),那是相当的简单。

在配置文件中,有些信息是不希望别人看到的。例如在<connectionStrings>节中可能包含连接数据库的用户名和密码。<identity>节中也可能包含用户名和密码。

注意:有些节可能含有密码,但不能加密,例如<processModel>节,为了安全,你可以应用Aspnet_setreg.exe工具来保存密码。

下面的例子演示如何加密和解密一节。提醒,这里的加密和解密用的单词是protectunprotect。注意:在实际应用中,我们并不需要明确的调用解密函数。在运行市,程序读取到加密了的配置节时将会自动调用解密。

protected void toggleEncryptionButton_Click(object sender, EventArgs e)

{

Configuration config;

config = WebConfigurationManager.OpenWebConfiguration("~");

ConnectionStringsSection section;

section = config.GetSection("connectionStrings")

as ConnectionStringsSection;

if (section.SectionInformation.IsProtected)

{

section.SectionInformation.UnprotectSection();

}

else

{

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

}

config.Save();

WriteMessage("connections protected = " + section.SectionInformation.IsProtected);

}

此代码的作用就是加密和解密connectionStrings节。如果原来加密(通过属性IsProtected判断)了,则解密。否则相反。分别调用了UnprotectSection()protectSection()函数。

下面是相关文件的变化。

加密前的connectionStrings.config文件内容如下:

5 加密前的connectionStrings.config文件内容

加密后connectionStrings.config文件内容如下:

6 加密后connectionStrings.config文件内容

对于结果的改变,我们可以对比一下,自己了解其变化。

但在上面的代码片断中,我们还有一个地方需要了解:加密提供者。目前有两种加密提供者:DataProtectionConfigurationProvider RSAProtectedConfigurationProvider。其中DataProtectionConfigurationProvider是利用Windows Data Protection API(DPAPI)提供与机器相关的加密解密。也就是说我们在哪一台机器上加密就只能在那一台机器上解密。如果需要在其它机器上解密则只能使用DataProtectionConfigurationProvider

3.2.5添加定制的配置节

当我们需要配置的数据比较多的时候,为了管理的方便。我们可能需要添加定制的配置节。下面用一个比较简单的例子来演示。

<configuration>

<configSections>

<section name="Logging" type="System.Configuration.NameValueSectionHandler" />

</configSections>

<Logging>

<add key="File Name" value="MyApp.log" />

<add key="MessageColumns" value="5" />

<add key="MaxFileSize" value="40000000000000" />

</Logging>

</configuration>

分享到:
评论

相关推荐

    ASP.NET 2.0 读取配置文件

    在描述中提到的"ASP.NET 2.0 读取配置文件[INI]",虽然通常ASP.NET使用XML格式的Web.config文件,但这里指的是读取传统的INI文件,这是一种简单文本格式的配置文件,广泛应用于早期的Windows系统和某些跨平台的应用...

    Programming Microsoft ASP.NET 2.0 Applications - Advanced Topics

    2. **控件与数据绑定**:书中会详细介绍ASP.NET 2.0的各种服务器控件,如GridView、DetailsView、FormView等,以及如何利用数据绑定机制(例如,DataSource控件)来连接数据库并展示数据。 3. **状态管理**:ASP...

    ASP.net 2.0网络编程从入门到精通-修订.rar

    - Windows Communication Foundation(WCF)虽不在ASP.NET 2.0中,但它是.NET Framework 3.0及更高版本中的集成服务框架。 本教程修订版可能涵盖了以上知识点的详细解释和实例,通过学习,开发者将能够熟练运用ASP...

    ASP.NET 2.0程序设计案例教程(课件)

    6. **配置和部署**:课程可能涉及如何配置ASP.NET应用程序,包括web.config文件的使用,以及如何将应用程序部署到IIS服务器上。 7. **AJAX支持**:ASP.NET 2.0引入了Atlas(后来成为AJAX Control Toolkit),提供...

    ASP.NET2.0实用教程(C#版)书中例子.rar

    这个“ASP.NET2.0实用教程(C#版)书中例子”PPT很可能会涵盖以上这些主题,并通过实例演示如何在实践中应用这些技术。PPT中的例子可能包括创建简单的Web表单、使用控件进行数据绑定、实现用户身份验证以及利用AJAX...

    ASP.NET 2.0入门与提高系列课程(5):ASP.NET 2.0配置与部署

    在这个“ASP.NET 2.0入门与提高系列课程(5):ASP.NET 2.0配置与部署”中,我们将深入探讨如何在实际环境中设置和发布ASP.NET应用程序,以及如何对其进行优化和维护。 一、配置ASP.NET 2.0 1. IIS配置:IIS...

    Wrox Asp.Net 2.0 Instant Results(asp.net2.0经典案例教程)

    在ASP.NET 2.0中,微软引入了一系列增强功能,如控件生命周期的改进、数据绑定模型的扩展、母版页(Master Pages)和站点导航等,极大地提高了开发效率和代码复用性。书中将深入探讨这些关键特性,并通过实际项目来...

    ASP.NET 2.0功能源码

    8. **配置管理**:ASP.NET 2.0的配置文件(web.config)使开发者能够轻松地配置应用程序的行为。源码可能包含了如何修改配置以改变应用程序行为的例子。 9. **缓存**:ASP.NET 2.0提供了高效的缓存机制,可以显著...

    asp.net 2.0 宝典

    Web.config是ASP.NET应用程序的配置文件,包含了应用程序的配置信息,如数据库连接字符串、安全设置、错误处理等。学习如何修改和利用这些配置可以极大地提高开发效率和应用的可维护性。 `07CacheDemo`可能涉及ASP...

    Win10离线安装 .net2.0/3.5

    标题“Win10离线安装 .net2.0/3.5”涉及到的是Windows 10操作系统中安装.NET Framework 2.0和3.5版本的过程。这些版本的.NET Framework对于运行某些旧版软件和应用程序,如SQL Server,是必不可少的。在Windows 10...

    精通ASP.NET2.0+SQL Server 2005项目开发 源码.rar

    4. 状态管理:介绍Session、ViewState和Cookie等状态管理机制,以及在ASP.NET 2.0中如何有效地使用它们。 5. 文件上传与下载:实现文件上传和下载功能,涉及文件操作和流处理,以及与数据库的交互。 6. 错误处理与...

    asp.net2.0 调用websevice 实现天气预报

    在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...

    ASP.NET 2.0入门经典(第4版)源码

    5. **配置管理**:ASP.NET 2.0引入了全面的配置系统,允许开发者在不修改代码的情况下更改应用程序的行为。例如,通过web.config文件可以设置数据库连接字符串、安全性选项等。 6. **状态管理**:ASP.NET 2.0提供了...

    Asp.net 2.0 揭秘源码(完全版)part02

    这里可能讲解了应用程序配置文件web.config的结构和用途,以及如何在不同的环境间迁移和部署Web应用程序。 4. **Chapter 11** - 可能关注Asp.net 2.0的安全性。安全是任何Web应用的重要方面,这一章可能会讲解身份...

    ASP.NET 2.0动态网站开发教程(最新)

    6. **配置管理**:ASP.NET 2.0的配置系统非常灵活,通过web.config文件,开发者可以轻松地更改应用程序的设置,无需重新编译代码。 7. **主题和皮肤**:ASP.NET 2.0支持主题和皮肤,这使得网站可以快速改变外观,...

    asp.net 2.0快速入门教程

    ASP.NET 2.0的配置文件(web.config)允许开发者轻松地更改应用程序设置和安全策略。安全性方面,ASP.NET提供了角色基础的安全性、身份验证和授权机制,确保只有授权用户能访问特定资源。 9. **Ajax支持** 虽然...

    asp.net2.0实用案例教程-PPT

    5. **配置和部署**:ASP.NET 2.0的配置文件(web.config)使得开发者能方便地更改应用程序的行为而无需重新编译。同时,学习如何部署ASP.NET应用程序到IIS服务器也是实践中的重要环节。 6. ** Membership 和角色...

    asp.net2.0技术内幕 源码

    `ch11code.zip`可能包含有关配置文件`web.config`的修改和应用程序部署的代码示例。 8. **缓存**:ASP.NET 2.0提供强大的缓存机制,可以显著提高应用程序性能。通过分析`ch08code.zip`,可以学习如何使用页面缓存、...

    深入挖掘ASP.NET 2.0系列课程(11):ASP.NET 中的静态页生成技术

    本篇文章将深入探讨ASP.NET 2.0中的静态页生成技术。 一、静态页与动态页的区别 在ASP.NET中,页面可以分为静态页和动态页。静态页通常是指HTML文件,它们在服务器上预先创建,并且在用户请求时无需经过编译或解释...

Global site tag (gtag.js) - Google Analytics