C#/ASP.NET應用程序配置文件app.config/web.config的增、刪、改操做,沒法爲請求的 Configuration 對象建立配置文件。

應用程序配置文件,對於asp.net是 web.config,對於WINFORM程序是 App.Config(ExeName.exe.config)。node

配置文件,對於程序自己來講,就是基礎和依據,其本質是一個xml文件,對於配置文件的操做,從.NET 2.0 開始,就很是方便了,提供了 System [.Web] .Configuration 這個管理功能的NameSpace,要使用它,須要添加對 System.configuration.dll的引用。web

對於WINFORM程序,使用 System.Configuration.ConfigurationManager;服務器

對於ASP.NET 程序, 使用 System.Web.Configuration.WebConfigurationManager;app

對於配置文件內容的讀取,真是太廣泛不過了,若是你的程序裏,沒有讀取配置文件內容的方面,你都很差意思拿出來用asp.net

咱們以最多見的 AppSettings 小節來做爲例子:編輯器

假設有以下的配置文件內容:工具

<?xml version="1.0" encoding="utf-8" ?>post

<configuration>this

  <appSettings>url

    <add key="y" value="this is Y"/>

  </appSettings>

</configuration>

1. 讀取值:

  • Asp.Net:   System.Web.Configuration.WebConfigurationManager.AppSettings[「y」];
  • WinForm:  System.Configuration.ConfigurationManager.AppSettings[「y」];

2. 添加一項

  • ASP.NET(須要有寫權限):

Configuration config = WebConfigurationManager.OpenWebConfiguration(null);

AppSettingsSection app = config.AppSettings;

app.Settings.Add("x", "this is X");

config.Save(ConfigurationSaveMode.Modified);

  • WinForm:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

AppSettingsSection app = config.AppSettings;

app.Settings.Add("x", "this is X");

config.Save(ConfigurationSaveMode.Modified);

3. 修改一項

  • Asp.Net

Configuration config = WebConfigurationManager.OpenWebConfiguration(null);

AppSettingsSection app = config.AppSettings;

//app.Settings.Add("x", "this is X");

app.Settings["x"].Value = "this is not Y";

config.Save(ConfigurationSaveMode.Modified);

  • WinForm

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

AppSettingsSection app = config.AppSettings;

//app.Settings.Add("x", "this is X");

app.Settings["x"].Value = "this is not Y";

config.Save(ConfigurationSaveMode.Modified);

4. 刪除一項

  • Asp.Net

Configuration config = WebConfigurationManager.OpenWebConfiguration(null);

AppSettingsSection app = config.AppSettings;

app.Settings.Remove("x");

config.Save(ConfigurationSaveMode.Modified);

  • WinForm

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

AppSettingsSection app = config.AppSettings;

app.Settings.Remove("x");

config.Save(ConfigurationSaveMode.Modified);

說明:須要注意的是,代碼所修改的並非app.config,而是[Application_Name].exe.config這個文件。其中Application_Name就是你的可執行文件的文件名,而[Application_Name].exe.config纔是真正起做用的配置文件。至於app.config,把它理解爲是初始化配置文件比較合適。對於winfom在vs調試下app.config無變化是正常的,bin裏面生成的程序,運行可看到效果。

 

 

事實上,運行時報錯:
「/」應用程序中的服務器錯誤。
--------------------------------------------------------------------------------

沒法爲請求的 Configuration 對象建立配置文件。 
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中致使錯誤的出處的詳細信息。

異常詳細信息: System.Configuration.ConfigurationErrorsException: 沒法爲請求的 Configuration 對象建立配置文件。

源錯誤:

行 13:         configuration.Save();//保存配置文件

後面查找幫助,說是:若要啓用對遠程服務器上配置設置的訪問,請使用 Aspnet_regiis 命令行工具。
而Aspnet_regiis幫助中說的是:-config+ 容許對計算機上的 ASP.NET 配置進行遠程訪問。
但執行該命令後運行該項目仍然報一樣錯誤。
再看幫助,說是:請注意,進行寫入操做的用戶或進程必須具備如下權限:
在當前配置層次結構級別下對配置文件和目錄的寫入權限。
對全部配置文件的讀取權限。

可是個人文件訪問權限是everyone徹底控制,應當不會沒有寫入權限吧。
後面進入組策略編輯器,發現管理員用戶竟然沒有啓用,而如今使用的當前用戶確實是Administrator,將用戶名修改後,發如今組策略編輯器中不能啓用管理員賬戶,估計是這個版本的XP被人修改了。最終也沒有解決這個問題

 

 

 

C# code ?
1
2
3
4
5
             Configuration webConfig = WebConfigurationManager.OpenWebConfiguration( "/Web.config" );
             AppSettingsSection app = webConfig.AppSettings;
             app.Settings[key].Value = value;
             webConfig.Save(ConfigurationSaveMode.Modified);
             ConfigurationManager.RefreshSection( "appSettings" );


這樣運行到webConfig.Save(ConfigurationSaveMode.Modified)的時候出現【沒法爲請求的 Configuration 對象建立配置文件。】

開始的時候我覺得config文件被佔用着不讓改,而後用下面的方法

C# code ?
1
2
3
4
5
6
7
8
             XmlDocument doc =  new  XmlDocument();
             doc.Load(Server.MapPath( "web.config" ));
             XmlNode node;
             XmlElement element;
             node = doc.SelectSingleNode( "//appSettings" );
             element = (XmlElement)node.SelectSingleNode( "//add[@key='"  + key +  "']" );
             element.SetAttribute( "value" , value);
             doc.Save(Server.MapPath( "web.config" ));
相關文章
相關標籤/搜索