2011-12-11 170 views
3

看起來一個微不足道的問題,但令人驚訝的是,只發現了一些解決方案,如this one,它解釋瞭如何使用不推薦使用的函數來添加一些屬性。我寧願要編輯一個。那麼,它是如何在.NET 4.0中完成的?動態修改app.config

更具體地說,需要設置數據庫的位置,在<connectionStrings>屬性中。

+0

你不能寫到.config文件,UAC阻止你。它是由一個管理員直接編輯的,該管理員從提升的命令提示符處運行編輯器。當您想編輯自己時,應用程序範圍設置會停止有用。只需將其設置爲用戶範圍設置(對於連接字符串來說很尷尬)或者使用.xml文件旋轉自己的範圍。 –

回答

1

此代碼是從this blog post改編和.NET 4進行了測試:

using System; 
using System.Configuration; 

class Program 
{ 
    static void ShowConfig() 
    { 
     // For read access you do not need to call the OpenExeConfiguraton 
     foreach (ConnectionStringSettings item in ConfigurationManager.ConnectionStrings) 
     { 
      Console.WriteLine("Key: {0}, Value: {1}", item.Name, item.ConnectionString); 
     } 
    } 

    static void Main(string[] args) 
    { 
     ShowConfig(); 

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

     var conSettings = new ConnectionStringSettings("NewName", "New connstring value"); 
     config.ConnectionStrings.ConnectionStrings.Add(conSettings); 
     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("connectionStrings"); 

     Console.WriteLine("===UPDATE==="); 
     ShowConfig(); 

     Console.Read(); 
    } 
} 

的App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
     <add name="db1" connectionString="blah"/> 
    </connectionStrings> 
</configuration> 

我的電腦上它打印

 
Key: LocalSqlServer, Value: data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 
Key: db1, Value: blah 
===UPDATE=== 
Key: LocalSqlServer, Value: data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 
Key: db1, Value: blah 
Key: NewName, Value: New connstring value 
+0

你還可以發佈「使用」指令嗎?在我的應用程序中無法獲取ConfigurationManager – Arnthor

+0

@Nordvind完成。您將需要添加對「System.Configuration.dll」的引用 – oleksii