看起來一個微不足道的問題,但令人驚訝的是,只發現了一些解決方案,如this one,它解釋瞭如何使用不推薦使用的函數來添加一些屬性。我寧願要編輯一個。那麼,它是如何在.NET 4.0中完成的?動態修改app.config
更具體地說,需要設置數據庫的位置,在<connectionStrings>
屬性中。
看起來一個微不足道的問題,但令人驚訝的是,只發現了一些解決方案,如this one,它解釋瞭如何使用不推薦使用的函數來添加一些屬性。我寧願要編輯一個。那麼,它是如何在.NET 4.0中完成的?動態修改app.config
更具體地說,需要設置數據庫的位置,在<connectionStrings>
屬性中。
此代碼是從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
你不能寫到.config文件,UAC阻止你。它是由一個管理員直接編輯的,該管理員從提升的命令提示符處運行編輯器。當您想編輯自己時,應用程序範圍設置會停止有用。只需將其設置爲用戶範圍設置(對於連接字符串來說很尷尬)或者使用.xml文件旋轉自己的範圍。 –