方法1:

System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameValueCollection) 
System.Configuration.ConfigurationManager.GetSection(sectionName);

string keyValue = nvc.GetValues(keyName)[0].ToString();

方法2:

System.Web.Configuration.WebConfigurationManager.AppSettings[keyName].ToString();

参考下面的文章

在C#中如何读取配置文件 
1. 配置文件概述: 
应 用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是 configuration。我们经常访问的是appSettings,它是由.Net预定义配置节。我们经常使用的配置文件的架构是象下面的形式。先大 概有个印象,通过后面的实例会有一个比较清楚的认识。下面的“配置节”可以理解为进行配置一个XML的节点。 
常见配置文件模式:

<configuration> 
<configSections> //配置节声明区域,包含配置节和命名空间声明 
<section> //配置节声明 
  <sectionGroup> //定义配置节组 
   <section> //配置节组中的配置节声明 
<appSettings> //预定义配置节 
<Custom element for configuration section> //配置节设置区域

2. 只有appSettings节的配置文件及访问方法 
下面是一个最常见的应用程序配置文件的例子,只有appSettings节。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<appSettings> 
<add key="connectionstring" value="User ID=sa;Data Source=.;Password=;Initial Catalog=test;Provider=SQLOLEDB.1;" /> 
<add key="TemplatePATH" value="Template" /> 
</appSettings> 
</configuration>

下面来看看这样的配置文件如何方法。 
string _connectionString=ConfigurationSettings.AppSettings["connectionstring"]; 
使用ConfigurationSettings类的静态属性AppSettings就可以直接方法配置文件中的配置信息。这个属性的类型是NameValueCollection。

3. 自定义配置文件 
3.1 自定义配置节 
一个用户自定义的配置节,在配置文件中分为两部分:一是在<configSections></ configSections>配置节中声明配置节(上面配置文件模式中的“<section>”),另外是在< configSections></ configSections >之后设置配置节(上面配置文件模式中的“<Custom element for configuration section>”),有点类似一个变量先声明,后使用一样。声明一个配置文件的语句如下: 
<section name=" " type=" "/> 
<section>:声明新配置节,即可创建新配置节。 
name:自定义配置节的名称。 
type:自定义配置节的类型,主要包括System.Configuration.SingleTagSectionHandler、 System.Configuration.DictionarySectionHandler、 System.Configuration.NameValueSectionHandler。 
不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异。下面我们就举一个配置文件的例子,让它包含这三个不同的type。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="Test1" type="System.Configuration.SingleTagSectionHandler"/> 
<section name="Test2" type="System.Configuration.DictionarySectionHandler"/> 
<section name="Test3" type="System.Configuration.NameValueSectionHandler" /> 
</configSections> 
<Test1 setting1="Hello" setting2="World"/> 
<Test2> 
<add key="Hello" value="World" /> 
</Test2> 
<Test3> 
<add key="Hello" value="World" /> 
</Test3> 
</configuration>

我们对上面的自定义配置节进行说明。在声明部分使用<section name="Test1" type="System.Configuration.SingleTagSectionHandler"/>声明了一个配置节它的名字叫 Test1,类型为SingleTagSectionHandler。在设置配置节部分使用 <Test1 setting1="Hello" setting2="World"/>设置了一个配置节,它的第一个设置的值是Hello,第二个值是World,当然还可以有更多。其它的两个配 置节和这个类似。 
下面我们看在程序中如何访问这些自定义的配置节。我们用过ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息。 
public static object GetConfig(string sectionName); 
下面是访问这三个配置节的代码:

//访问配置节Test1 
IDictionary IDTest1 = (IDictionary)ConfigurationSettings.GetConfig("Test1"); 
string str = (string)IDTest1["setting1"] +" "+(string)IDTest1["setting2"]; 
MessageBox.Show(str); //输出Hello World 
//访问配置节Test1的方法2 
string[] values1=new string[IDTest1.Count]; 
IDTest1.Values.CopyTo(values1,0); 
MessageBox.Show(values1[0]+" "+values1[1]); //输出Hello World 
//访问配置节Test2 
IDictionary IDTest2 = (IDictionary)ConfigurationSettings.GetConfig("Test2"); 
string[] keys=new string[IDTest2.Keys.Count]; 
string[] values=new string[IDTest2.Keys.Count]; 
IDTest2.Keys.CopyTo(keys,0); 
IDTest2.Values.CopyTo(values,0); 
MessageBox.Show(keys[0]+" "+values[0]); 
//访问配置节Test3 
NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3"); 
MessageBox.Show(nc.AllKeys[0].ToString()+" "+nc["Hello"]); //输出Hello World

通过上面的代码我们可以看出,不同的type通过GetConfig返回的类型不同,具体获得配置内容的方式也不一样。 配置节处理程序 
返回类型

SingleTagSectionHandler 
Systems.Collections.IDictionary 
DictionarySectionHandler 
Systems.Collections.IDictionary 
NameValueSectionHandler 
Systems.Collections.Specialized.NameValueCollection

3.2 自定义配置节组 
配置节组是使用<sectionGroup>元素,将类似的配置节分到同一个组中。配置节组声明 部分将创建配置节的包含元素,在<configSections>元素中声明配置节组,并将属于该组的节置于< sectionGroup>元素中。下面是一个包含配置节组的配置文件的例子:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<sectionGroup name="TestGroup"> 
<section name="Test" type="System.Configuration.NameValueSectionHandler"/> 
</sectionGroup> 
</configSections> 
<TestGroup> 
<Test> 
<add key="Hello" value="World"/> 
</Test> 
</TestGroup> 
</configuration>

下面是访问这个配置节组的代码: 
NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test"); 
MessageBox.Show(nc.AllKeys[0].ToString()+" "+nc["Hello"]); //输出Hello World 
C# 解析配置文件内容 System.Configuration 
1. 创建配置节类 
必须创建继承自ConfigurationSection的对象才能进行配置数据读写操作,ConfigurationSection提供了索引器用来获取和设置配置数据,需要注意的是拥有ConfigurationProperty特性的属性才会被存储,并且名称要保持大小写完全一致,如下面的代码中,所有的"id"必须保持一样。

class ConfigSectionData : ConfigurationSection 

[ConfigurationProperty("id")] 
public int Id 

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

[ConfigurationProperty("time")] 
public DateTime Time 

get { return (DateTime)this["time"]; } 
set { this["time"] = value; } 

}

2. 创建配置文件操作对象 

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConfigSectionData data = new ConfigSectionData(); 
data.Id = 1000; 
data.Time = DateTime.Now; 
config.Sections.Add("add", data); 
config.Save(ConfigurationSaveMode.Minimal);

上面的例子是操作 app.config,在根节点(configuration)下写入名称为"add"的配置数据。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="add" type="ConsoleApplication1.ConfigSectionData, ... /> 
</configSections> 
<add id="1000" time="02/18/2006 21:51:06" /> 
</configuration>

需要注意的 VS2005 在IDE模式下会将信息写入 *.vshost.exe.config,并且在程序关闭时覆写该文件,因此您可能看不到您写入的配置数据,只要在资源管理其中执行 *.exe 文件,您就可以在 *.exe.config 文件中看到结果了。 
如果我们需要操作非缺省配置文件,可以使用ExeConfigurationFileMap对象。

ExeConfigurationFileMap file = new ExeConfigurationFileMap(); 
file.ExeConfigFilename = "test.config"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); 
ConfigSectionData data = new ConfigSectionData(); 
data.Id = 1000; 
data.Time = DateTime.Now; 
config.Sections.Add("add", data); 
config.Save(ConfigurationSaveMode.Minimal);

如果我们不希望在根节点下写入配置数据,可以使用ConfigurationSectionGroup对象。

ExeConfigurationFileMap file = new ExeConfigurationFileMap(); 
file.ExeConfigFilename = "test.config"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); 
ConfigSectionData data = new ConfigSectionData(); 
data.Id = 1000; 
data.Time = DateTime.Now; 
config.SectionGroups.Add("group1", new ConfigurationSectionGroup()); 
config.SectionGroups["group1"].Sections.Add("add", data); 
config.Save(ConfigurationSaveMode.Minimal);

下面就是生成的配置文件。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<configSections> 
<sectionGroup name="group1" type="System.Configuration.ConfigurationSectionGroup, ... > 
<section name="add" type="ConsoleApplication1.ConfigSectionData, ... /> 
</sectionGroup> 
</configSections> 
<group1> 
<add id="1000" time="02/18/2006 22:01:02" /> 
</group1> 
</configuration>

3. 读取配置文件 

ExeConfigurationFileMap file = new ExeConfigurationFileMap(); 
file.ExeConfigFilename = "test.config"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); 
ConfigSectionData data = config.SectionGroups["group1"].Sections["add"] as ConfigSectionData; 
//ConfigSectionData data = config.Sections["add"] as ConfigSectionData; // 从根节读取 
if (data != null) 

Console.WriteLine(data.Id); 
Console.WriteLine(data.Time); 
}

4. 写配置文件 
在写入 ConfigurationSectionGroup 和 ConfigurationSection 前要判断同名配置是否已经存在,否则会写入失败。 
另外如果配置文件被其他Configuration对象修改,则保存会失败,并抛出异常。建议采用Singleton模式。

ExeConfigurationFileMap file = new ExeConfigurationFileMap(); 
file.ExeConfigFilename = "test.config"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); 
ConfigSectionData data = new ConfigSectionData(); 
data.Id = 2000; 
data.Time = DateTime.Now; 
ConfigurationSectionGroup group1 = config.SectionGroups["group1"]; 
if (group1 == null) 
config.SectionGroups.Add("group1", new ConfigurationSectionGroup()); 
ConfigurationSection data = group1.Sections["add"] as config; 
if (add == null) 
config.SectionGroups["group1"].Sections.Add("add", data); 
else 

group1.Sections.Remove("add"); 
group1.Sections.Add("add", data); 
// 或者直接修改原配置对象,前提是类型转换要成功。 
//ConfigSectionData configData = add as ConfigSectionData; 
//configData.Id = data.Id; 
//configData.Time = data.Time; 

config.Save(ConfigurationSaveMode.Minimal);

5. 删除配置节

删除ConfigurationSectionGroup 
config.SectionGroups.Remove("group1"); 
//config.SectionGroups.Clear(); 
config.Save(ConfigurationSaveMode.Minimal); 
删除ConfigurationSection 
config.Sections.Remove("add1"); 
//config.Sections.Clear(); 
if (config.SectionGroups["group1"] != null) 

config.SectionGroups["group1"].Sections.Remove("add2"); 
//config.SectionGroups["group1"].Sections.Clear(); 

config.Save(ConfigurationSaveMode.Minimal);

6. 其他 
可以使用 ConfigurationManager.OpenMachineConfiguration() 来操作 Machine.config 文件。 
或者使用 System.Web.Configuration 名字空间中的 WebConfigurationManager 类来操作 ASP.net 配置文件。 
ConfigurationManager还提供了AppSettings、ConnectionStrings、GetSection()等便捷操作。 
7. 使用自定义类 
可以使用自定义类,不过需要定义一个转换器。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Globalization; 
using System.ComponentModel; 
// 要写入配置文件的自定义类 
class CustomData 

public CustomData(string s) 

this.s = s; 

private string s; 
public string S 

get { return s; } 
set { s = value; } 


// 自定义的转换器(演示代码省略了类型判断) 
class CustomConvert : ConfigurationConverterBase 

public override bool CanConvertFrom(ITypeDescriptorContext ctx, Type type) 

return (type == typeof(string)); 

public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type type) 

return (value as CustomData).S; 

public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data) 

return new CustomData((string)data);; 


class ConfigSectionData : ConfigurationSection 

[ConfigurationProperty("id")] 
public int Id 

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

[ConfigurationProperty("time")] 
public DateTime Time 

get { return (DateTime)this["time"]; } 
set { this["time"] = value; } 

[ConfigurationProperty("custom")] 
[TypeConverter(typeof(CustomConvert))] // 指定转换器 
public CustomData Custom 

get { return (CustomData)this["custom"]; } 
set { this["custom"] = value; } 


public class Program 

static void Main(string[] args) 

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConfigSectionData data = new ConfigSectionData(); 
data.Id = 1000; 
data.Time = DateTime.Now; 
data.Custom = new CustomData("abcdefg..."); 
config.Sections.Add("add", data); 
config.Save(ConfigurationSaveMode.Minimal); 
// 读取测试 
ConfigSectionData configData = (ConfigSectionData)config.Sections["add"]; 
Console.WriteLine(configData.Custom.S); 

}

保存后的配置文件

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="add" type="..." /> 
</configSections> 
<add id="1000" time="04/17/2006 22:06:58" custom="abcdefg..." /> 
</configuration>

asp.net 读取配置文件方法的更多相关文章

  1. asp.net读写配置文件方法

    方法1: System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameVa ...

  2. ASP.NET读取配置文件发送邮件

    之前写过一篇文章C#使用SMTP发送邮件 后来做了改进,改成读取独立的配置文件,本文只记录读取配置文件的部分,发送部分见上面的链接. 读取配置文件C#代码: using System; using S ...

  3. Asp.NetCore 读取配置文件帮助类

    /// <summary> /// 读取配置文件信息 /// </summary> public class ConfigExtensions { public static ...

  4. java读取配置文件方法以及工具类

    第一种方式 : java工具类读取配置文件工具类 只是案例代码  抓取异常以后的代码自己处理 import java.io.FileNotFoundException; import java.io. ...

  5. asp.net读取xml方法

    这个适合刚学asp.net的同学,大神直接略过好了,asp.net经常会有很多用到XML的地方,比如全国省市的联动,以及一些菜单读取等等都有xml的影子,直接贴代码,以便我以后用到的时候忘了,注释我写 ...

  6. C# 读取配置文件方法

    如 xml中写: <?xml version="1.0" encoding="utf-8" ?> <config> <serv_i ...

  7. python 读取配置文件方法

    #coding=utf8 import ConfigParser config = ConfigParser.ConfigParser() config.readfp(open(raw_input(& ...

  8. PHP读取配置文件连接MySQL数据库

    读取配置文件方法parse_ini_file($filepath [,$section]) 代码: conn.php <?php //连接数据库 //$conn =new mysqli('loc ...

  9. ASP.NET Core开发-读取配置文件Configuration

    ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...

随机推荐

  1. 让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新

    本文是对下文的补充,切勿以为我是全盘复制哦 连接: http://www.cnblogs.com/wlflovenet/p/4187455.html Normal 0 7.8 磅 0 2 false ...

  2. 二维纹理 Texture 2D

    Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...

  3. 算法笔记_089:蓝桥杯练习 7-2求arccos值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI].要求结果准确 ...

  4. windows下at命令使用详解

    T命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排.任务的管理.工作事务的处理方面,AT命令具有更强大更神通的功能.AT命令可在指定时间和日期.在指 ...

  5. 小程序数组合并concat

      arr1=arr1.concat(arr2)   文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.

  6. Android4.4 SystemUI加入Dialog弹窗

    此弹窗为开机SystemUI的显示弹窗: 首先.在SystemUI的源代码文件夹加入源代码类文件,文件夹为frameworks/base/packages/SystemUI/src/com/andro ...

  7. 03-spring学习-自动装配

    自动装配 新建person类: package com.spring.bean.autowire; public class Person { private String name; private ...

  8. Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享

    Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25 标签:会话共享 主从 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  9. 启动loadrunner 11的controller提示试图执行系统不支持的操作(已解决)

    启动loadrunner 11的controller提示试图执行系统不支持的操作 分类: loadrunner 2014-05-12 17:33 532人阅读 评论(0) 收藏 举报 win7旗舰版3 ...

  10. JS遍历数组类型元素

    已停供用户不能再次停供,之前没太处理过多维数组的遍历,趁这个机会回顾一下js数组遍历 可以看出rows 获取了两条数据,为二维数组类型 方法 function batchTgWin() { var r ...