.net Framework配置文件詳細操作指導手冊
.NET Framework的應用可以幫助開發人員創建一個支持WEB應用程序部署的平臺。方便編程人員進行代碼編寫。我們將會在文章中為大家詳細介紹有關.NET Framework配置文件的操作方法,希望對大家有所幫助。#t#
.NET Framework配置文件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;
- }
- }
- }
.NET Framework配置文件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(Configuration
SaveMode.Minimal);
上面的例子是操作 app.config,在根節點(configuration)下寫入名稱為"add"的配置數據。
需要注意的 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);
下面就是生成的配置文件。
.NET Framework配置文件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);
- }
.NET Framework配置文件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);
#p#
.NET Framework配置文件5. 刪除配置節
刪除ConfigurationSectionGroup
- config.SectionGroups.
Remove("group1");- //config.SectionGroups.Clear();
- config.Save(Configuration
SaveMode.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(Configuration
SaveMode.Minimal);
.NET Framework配置文件6. 其他
可以使用 ConfigurationManager.OpenMachineConfiguration() 來操作 Machine.config 文件。 或者使用 System.Web.Configuration 名字空間中的 WebConfigurationManager 類來操作 ASP.net 配置文件。 ConfigurationManager還提供了AppSettings、ConnectionStrings、GetSection()等便捷操作。
.NET Framework配置文件7. 使用自定義類
比如ConfigSectionData里面,除了簡單類型之外,可不可以有自定義的類。可以使用自定義類,不過需要定義一個轉換器。
- 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 : Configuration
ConverterBase- {
- 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"];- bbs.bitsCN.com Console.WriteLine
(configData.Custom.S);- }
- }
.NET Framework配置文件的相關操作方法就為大家介紹到這里。