App.Config详解
配置文件的根節點是configuration。我們經常訪問的是appSettings,它是由.Net預定義配置節。我們經常使用的配置文件的架構是象下面的形式。
先大概有個印象,通過后面的實例會有一個比較清楚的認識。下面的“配置節”可以理解為進行配置一個XML的節點。?
1.??向項目添加?app.config?文件: 右擊項目名稱,選擇“添加”→“添加新建項”,在出現的“添加新項”對話框中,選擇“添加應用程序配置文件”;如果項目以前沒有配置文件,則默認的文件名稱為“?app.config?”,單擊“確定”。出現在設計器視圖中的app.config?文件為: <??xml?version?=?"1.0?"encoding?=?"utf-8?"??> <?configuration?> </?configuration?> 在項目進行編譯后,在?bin/Debuge?文件下,將出現兩個配置文件?(?以本項目為例?)?,一個名為“JxcManagement.EXE.config?”,另一個名為“?JxcManagement.vshost.exe.config?”。第一個文件為項目實際使用的配置文件,在程序運行中所做的更改都將被保存于此;第二個文件為原代碼“?app.config?”的同步文件,在程序運行中不會發生更改。 2.??connectionStrings?配置節: 請注意:如果您的?SQL?版本為?2005 Express?版,則默認安裝時?SQL?服務器實例名為localhost/SQLExpress?,須更改以下實例中“?Data Source=localhost;?”一句為“?Data Source=localhost/SQLExpress;?”,在等于號的兩邊不要加上空格。 <!--?數據庫連接串?--> ???? <?connectionStrings?> ???????? <?clear?/> ???????? <?add?name?=?"conJxcBook?" ??????????????connectionString?=?"Data Source=localhost;Initial Catalog=jxcbook;User ??????????????????????? ???? ???? ID=sa;password=********?" ??????????????providerName?=?"System.Data.SqlClient?"?/> ???? </?connectionStrings?> 3.?appSettings?配置節: appSettings?配置節為整個程序的配置,如果是對當前用戶的配置,請使用?userSettings?配置節,其格式與以下配置書寫要求一樣。 <!--?進銷存管理系統初始化需要的參數?--> ???? <?appSettings?> ???????? <?clear?/> ???????? <?add?key?=?"userName?"value?=?""?/> ???????? <?add?key?=?"password?"value?=?""?/> ???????? <?add?key?=?"Department?"value?=?""?/> ???????? <?add?key?=?"returnValue?"value?=?""?/> ???????? <?add?key?=?"pwdPattern?"value?=?""?/> ???????? <?add?key?=?"userPattern?"value?=?""?/> </?appSettings?> 4.?讀取與更新?app.config 對于app.config?文件的讀寫,參照了網絡文章:http://www.codeproject.com/csharp/? SystemConfiguration.asp標題為“Read/Write App.Config File with .NET 2.0”一文。 請注意:要使用以下的代碼訪問app.config文件,除添加引用System.Configuration外,還必須在項目添加對System.Configuration.dll的引用。 4.1 讀取connectionStrings配置節 ///?<summary> ///?依據連接串名字connectionName返回數據連接字符串 ///?</summary> ///?<param name="connectionName"></param> ///?<returns></returns> private?static?string?GetConnectionStringsConfig(string?connectionName) { string?connectionString = ????????ConfigurationManager?.ConnectionStrings[connectionName].ConnectionString.ToString(); ????Console?.WriteLine(connectionString); ????return?connectionString; } 4.2 更新connectionStrings配置節 ///?<summary> ///?更新連接字符串 ///?</summary> ///?<param name="newName">?連接字符串名稱?</param> ///?<param name="newConString">?連接字符串內容?</param> ///?<param name="newProviderName">?數據提供程序名稱?</param> private?static?void?UpdateConnectionStringsConfig(string?newName, ????string?newConString, ????string?newProviderName) { ????bool?isModified =?false?;????//?記錄該連接串是否已經存在 ????//?如果要更改的連接串已經存在 ????if?(ConfigurationManager?.ConnectionStrings[newName] !=?null?) ??? { ??????? isModified =?true?; ??? } ????//?新建一個連接字符串實例 ????ConnectionStringSettings?mySettings = ????????new?ConnectionStringSettings?(newName, newConString, newProviderName); ????//?打開可執行的配置文件*.exe.config ????Configuration?config = ????????ConfigurationManager?.OpenExeConfiguration(ConfigurationUserLevel?.None); ????//?如果連接串已存在,首先刪除它 ????if?(isModified) ??? { ??????? config.ConnectionStrings.ConnectionStrings.Remove(newName); ??? } ????//?將新的連接串添加到配置文件中. ??? config.ConnectionStrings.ConnectionStrings.Add(mySettings); ????//?保存對配置文件所作的更改 ??? config.Save(ConfigurationSaveMode?.Modified); ????//?強制重新載入配置文件的ConnectionStrings配置節 ????ConfigurationManager?.RefreshSection("ConnectionStrings"?); } 4.3 讀取appStrings配置節 ///?<summary> ///?返回*.exe.config文件中appSettings配置節的value項 ///?</summary> ///?<param name="strKey"></param> ///?<returns></returns> private?static?string?GetAppConfig(string?strKey) { ????foreach?(string?key?in?ConfigurationManager?.AppSettings) ??? { ????????if?(key == strKey) ??????? { ????????????return?ConfigurationManager?.AppSettings[strKey]; ??????? } ??? } ????return?null?; } 4.4 更新connectionStrings配置節 ///?<summary> ///?在*.exe.config文件中appSettings配置節增加一對鍵、值對 ///?</summary> ///?<param name="newKey"></param> ///?<param name="newValue"></param> private?static?void?UpdateAppConfig(string?newKey,?string?newValue) { ????bool?isModified =?false?;??? ????foreach?(string?key?in?ConfigurationManager?.AppSettings) ??? { ???????if?(key==newKey) ??????? {??? ??????????? isModified =?true?; ??????? } ??? } ????// Open App.Config of executable ????Configuration?config = ????????ConfigurationManager?.OpenExeConfiguration(ConfigurationUserLevel?.None); ????// You need to remove the old settings object before you can replace it ????if?(isModified) ??? { ??????? config.AppSettings.Settings.Remove(newKey); ??? }??? ????// Add an Application Setting. ??? config.AppSettings.Settings.Add(newKey,newValue);?? ????// Save the changes in App.config file. ??? config.Save(ConfigurationSaveMode?.Modified); ????// Force a reload of a changed section. ????ConfigurationManager?.RefreshSection("appSettings"?);
}
C#讀寫app.config中的數據讀語句:
String str = ConfigurationManager.AppSettings["DemoKey"];?寫語句:
Configuration cfa =? ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);cfa.AppSettings.Settings["DemoKey"].Value = "DemoValue";
cfa.Save();
?配置文件內容格式:(app.config)
<?xml version="1.0" encoding="utf-8" ?><configuration>
<appSettings>
<add key="DemoKey" value="*" />
</appSettings>
</configuration>
?紅筆標明的幾個關鍵節是必須的
System.Configuration.ConfigurationSettings.AppSettings["Key"];? 但是現在FrameWork2.0已經明確表示此屬性已經過時。并建議改為ConfigurationManager?
或WebConfigurationManager。并且AppSettings屬性是只讀的,并不支持修改屬性值.
但是要想調用ConfigurationManager必須要先在工程里添加system.configuration.dll程序集的引用。
(在解決方案管理器中右鍵點擊工程名稱,在右鍵菜單中選擇添加引用,.net TablePage下即可找到)
添加引用后可以用 String str = ConfigurationManager.AppSettings["Key"]來獲取對應的值了。
更新配置文件:
Configuration cfa = ConfigurationManager. OpenExeConfiguration(ConfigurationUserLevel.None);cfa.AppSettings.Settings.Add("key", "Name")?|| cfa.AppSettings.Settings["BrowseDir"].Value = "name"; 等等...
最后調用
cfa.Save();?
當前的配置文件更新成功。
*****************************************************************************************************************
讀寫配置文件app.config?
在.Net中提供了配置文件,讓我們可以很方面的處理配置信息,這個配置是XML格式的。而且.Net中已經提供了一些訪問這個文件的功能。
1、讀取配置信息
下面是一個配置文件的具體內容:
<configuration>
<appSettings>
<add key="ConnenctionString" value="*" />
<add key="TmpPath" value="C:\Temp" />
</appSettings>
</configuration>
?.net提供了可以直接訪問<appsettings>(注意大小寫)元素的方法,在這元素中有很多的子元素,這些子元素名稱都是 “add”,有兩個屬性分別是“key”和“value”。一般情況下我們可以將自己的配置信息寫在這個區域中,通過下面的方式進行訪問:
string ConString=System.Configuration .ConfigurationSettings.AppSettings["ConnenctionString"]; 在appsettings后面的是子元素的key屬性的值,例如appsettings["connenctionstring"],我們就是訪 問<add key="ConnenctionString" value="*" />這個子元素,它的返回值就是“*”,即value屬性的值。2、設置配置信息
如果配置信息是靜態的,我們可以手工配置,要注意格式。如果配置信息是動態的,就需要我們寫程序來實現。在.Net中沒有寫配置文件的功能,我們可以使用操作XML文件的方式來操作配置文件。下面就是一個寫配置文件的例子。
private void SaveConfig(string ConnenctionString){
XmlDocument doc=new XmlDocument();
//獲得配置文件的全路徑
string strFileName=AppDomain.CurrentDomain.BaseDirectory.ToString() +"Code.exe.config";
doc.LOAd(strFileName);
//找出名稱為“add”的所有元素
XmlNodeList nodes=doc.GetElementsByTagName("add");
for(int i=0;i<nodes.Count;i++)
{
//獲得將當前元素的key屬性
XmlAttribute att=nodes[i].Attributes["key"];
//根據元素的第一個屬性來判斷當前的元素是不是目標元素
if (att.Value=="ConnectionString")
{
//對目標元素中的第二個屬性賦值
att=nodes[i].Attributes["value"];
att.Value=ConnenctionString;
break;
}
}
//保存上面的修改
doc.Save(strFileName);
} 讀取并修改App.config文件
1.?向項目添加app.config文件: 右擊項目名稱,選擇“添加”→“添加新建項”,在出現的“添加新項”對話框中,選擇“添加應用程序配置文件”;如果項目以前沒有配置文件,則默認的文件名稱為“app.config”,單擊“確定”。出現在設計器視圖中的app.config文件為: <?xmlversion="1.0"encoding="utf-8"??> <configuration> </configuration> 在項目進行編譯后,在bin\Debuge文件下,將出現兩個配置文件(以本項目為例),一個名為“JxcManagement.EXE.config”,另一個名為“JxcManagement.vshost.exe.config”。第一個文件為項目實際使用的配置文件,在程序運行中所做的更改都將被保存于此;第二個文件為原代碼“app.config”的同步文件,在程序運行中不會發生更改。 2.??connectionStrings配置節: 請注意:如果您的SQL版本為2005 Express版,則默認安裝時SQL服務器實例名為localhost\SQLExpress,須更改以下實例中“Data Source=localhost;”一句為“Data Source=localhost\SQLExpress;”,在等于號的兩邊不要加上空格。 <!--數據庫連接串--> ???? <connectionStrings> ???????? <clear?/> ???????? <addname="conJxcBook" ??????????????connectionString="Data Source=localhost;Initial Catalog=jxcbook;User ??????????????????????? ???? ???? ID=sa;password=********" ??????????????providerName="System.Data.SqlClient"?/> ???? </connectionStrings> 3.?appSettings配置節: appSettings配置節為整個程序的配置,如果是對當前用戶的配置,請使用userSettings配置節,其格式與以下配置書寫要求一樣。 <!--進銷存管理系統初始化需要的參數--> ???? <appSettings> ???????? <clear?/> ???????? <addkey="userName"value=""?/> ???????? <addkey="password"value=""?/> ???????? <addkey="Department"value=""?/> ???????? <addkey="returnValue"value=""?/> ???????? <addkey="pwdPattern"value=""?/> ???????? <addkey="userPattern"value=""?/> </appSettings> 4.讀取與更新app.config 對于app.config文件的讀寫,參照了網絡文章:http://www.codeproject.com/csharp/ SystemConfiguration.asp標題為“Read/Write App.Config File with .NET 2.0”一文。 請注意:要使用以下的代碼訪問app.config文件,除添加引用System.Configuration外,還必須在項目添加對System.Configuration.dll的引用。 4.1 讀取connectionStrings配置節 ///<summary> ///依據連接串名字connectionName返回數據連接字符串 ///</summary> ///<param name="connectionName"></param> ///<returns></returns> private?static?string?GetConnectionStringsConfig(string?connectionName) { string?connectionString = ????????ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString(); ????Console.WriteLine(connectionString); ????return?connectionString; } 4.2 更新connectionStrings配置節 ///<summary> ///更新連接字符串 ///</summary> ///<param name="newName">連接字符串名稱</param> ///<param name="newConString">連接字符串內容</param> ///<param name="newProviderName">數據提供程序名稱</param> private?static?void?UpdateConnectionStringsConfig(string?newName, ????string?newConString, ????string?newProviderName) { ????bool?isModified =?false;????//記錄該連接串是否已經存在 ????//如果要更改的連接串已經存在 ????if?(ConfigurationManager.ConnectionStrings[newName] !=?null) ??? { ??????? isModified =?true; ??? } ????//新建一個連接字符串實例 ????ConnectionStringSettings?mySettings = ????????new?ConnectionStringSettings(newName, newConString, newProviderName); ????//?打開可執行的配置文件*.exe.config ????Configuration?config = ????????ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); ????//?如果連接串已存在,首先刪除它 ????if?(isModified) ??? { ??????? config.ConnectionStrings.ConnectionStrings.Remove(newName); ??? } ????//?將新的連接串添加到配置文件中. ??? config.ConnectionStrings.ConnectionStrings.Add(mySettings); ????//?保存對配置文件所作的更改 ??? config.Save(ConfigurationSaveMode.Modified); ????//?強制重新載入配置文件的ConnectionStrings配置節 ????ConfigurationManager.RefreshSection("ConnectionStrings"); } 4.3 讀取appStrings配置節 ///<summary> ///返回*.exe.config文件中appSettings配置節的value項 ///</summary> ///<param name="strKey"></param> ///<returns></returns> private?static?string?GetAppConfig(string?strKey) { ????foreach?(string?key?in?ConfigurationManager.AppSettings) ??? { ????????if?(key == strKey) ??????? { ????????????return?ConfigurationManager.AppSettings[strKey]; ??????? } ??? } ????return?null; } 4.4 更新connectionStrings配置節 ///<summary> ///在*.exe.config文件中appSettings配置節增加一對鍵、值對 ///</summary> ///<param name="newKey"></param> ///<param name="newValue"></param> private?static?void?UpdateAppConfig(string?newKey,?string?newValue) { ????bool?isModified =?false;??? ????foreach?(string?key?in?ConfigurationManager.AppSettings) ??? { ???????if(key==newKey) ??????? {??? ??????????? isModified =?true; ??????? } ??? } ????// Open App.Config of executable ????Configuration?config = ????????ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); ????// You need to remove the old settings object before you can replace it ????if?(isModified) ??? { ??????? config.AppSettings.Settings.Remove(newKey); ??? }??? ????// Add an Application Setting. ??? config.AppSettings.Settings.Add(newKey,newValue);?? ????// Save the changes in App.config file. ??? config.Save(ConfigurationSaveMode.Modified); ????// Force a reload of a changed section. ????ConfigurationManager.RefreshSection("appSettings"); } url:http://greatverve.cnblogs.com/archive/2011/07/18/app-config.html 程序員的網店:http://shop108042866.taobao.com呵呵?
凡事以大氣象去面對,優秀是一種習慣。
總結
以上是生活随笔為你收集整理的App.Config详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用VS搭建三层结构
- 下一篇: C#操作SQL Server通用类