2009-08-31 123 views
17

我想修改app.config中appSetting部分的值。所以我寫道,動態更改app.config文件中的值

Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["name"].Value = "raja";  
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 
Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 

執行上述代碼後,我驗證了app.config是否已更改「name」元素的值。但沒有變化。

我的代碼有什麼問題?或者有沒有其他辦法可以做到這一點?

+2

它改變了只在內存中的水平。它不更新物理層面(文件級別) – Partha 2009-08-31 12:48:53

+3

你不應該這樣做。應用程序級別的設置不應該被修改(這就是爲什麼沒有支持),但你應該使用用戶級別的設置。 – 2009-08-31 13:31:14

+0

選中此鏈接。它應該解決你的問題。 http://stackoverflow.com/questions/11149556/c-sharp-app-config-change-value – Indira 2014-06-24 20:43:42

回答

1

它的工作原理,只需看一下bin/Debug文件夾,你可能會看到項目中的app.config文件。

+1

是的,但我怎麼能查嗎?在我的情況下,與更新之前相同的值? – 2013-09-05 10:42:38

5

必須更新您的app.config文件手動

// Load the app.config file 
XmlDocument xml = new XmlDocument(); 
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

// Do whatever you need, like modifying the appSettings section 

// Save the new setting 
xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

然後告訴您的應用程序重新加載你修改

ConfigurationManager.RefreshSection("appSettings"); 
+2

請注意更新最可能位於Program Files中的文件的任何安全問題。在Vista下,您需要提升權限才能寫入Program Files中的文件。 – 2009-08-31 13:18:52

41

任何部分此代碼的工作對我來說:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.AppSettings.Settings["test"].Value = "blah";  
    config.Save(ConfigurationSaveMode.Modified); 
    ConfigurationManager.RefreshSection("appSettings"); 

注意:它不會更新解決方案項目'app.config',而是bin/f中的'.exe.config'之一如果你用F5運行它,則會更老。

+0

這有幫助,謝謝你的答案。 – fuzz 2012-08-29 00:53:19

+0

Dude很棒,T.Hanks! – 2014-02-28 10:10:13

+0

這不起作用。它仍然不顯示設置已更改,直到我下次重新運行應用程序。不知道發生了什麼事。 – 2015-10-20 21:59:37

0

嘗試:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings.Remove("configFilePath"); 
config.AppSettings.Settings.Add("configFilePath", configFilePath); 
config.Save(ConfigurationSaveMode.Modified,true); 
config.SaveAs(@"C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\ADI2v1.4\ADI2CE2\App.config",ConfigurationSaveMode.Modified, true); 
4

上的Adis H公司的例子擴大到包括空的情況下(有在這一個位)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["HostName"] != null) 
       config.AppSettings.Settings["HostName"].Value = hostName; 
      else     
       config.AppSettings.Settings.Add("HostName", hostName);     
      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection("appSettings");