![](/img/trans.png)
[英]overriding/replacing ConfigurationElements in app.config in runtime
[英]Replacing app.config at runtime
這是我的appconfig:
<connectionStrings>
<add name ="cn" connectionString="User ID=YOUR_USER_HERE; Password=YOUR_PASS_HERE;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=.)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=.)));"/>
</connectionStrings>
我已經嘗試過此功能:
public void updateConfigFile(string con)
{
//updating config file
XmlDocument XmlDoc = new XmlDocument();
//Loading the Config file
XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
foreach (XmlElement xElement in XmlDoc.DocumentElement)
{
if (xElement.Name == "connectionStrings")
{
{
xElement.FirstChild.Attributes[1].Value = con;
}
}
}
//writing the connection string in config file
XmlDoc.Save("App.config");
}
那沒有用。 它運行沒有任何錯誤。 但是它沒有將connectionString保存到appconfig文件中。 我也嘗試過這個想法:
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["Blah"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah";
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");
我收到一條錯誤消息,顯示UnauthorizedAccess。 (我相信是由於我的學校網絡)
到目前為止,這兩個選項均無效。 我還嘗試將ConfigurationManager.ConnectionStrings["cn"]
為我的自定義connectionString。 由於它是只讀的,因此也失敗了。 還有其他想法可以在運行時替換connectionString嗎?
提前致謝。
必須在應用程序啟動之前完成更改應用程序配置文件的操作,因為某些鍵在僅引導應用程序時由運行時讀取,而其他鍵則變為只讀。
您只能通過引用System.Configuration
程序集來動態更改AppSettings
部分的配置條目。 所有其他鍵在設計上都是只讀的。
如果您不想在啟動應用程序之前更改配置,則需要考慮所有涉及的實體:誰將讀取您的連接字符串? 如果是您,則可以將其存儲在其他位置,甚至存儲在AppSettings
項中。 相反,如果外部組件需要從您的配置文件中讀取它,則您沒有機會更改應用程序的體系結構,以便有一個包裝程序在運行應用程序之前進行更改。
在引用System.Configuration
程序集之后,可以通過這種方式更改AppSettings
項(這很重要)。
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="key1" value="configuration"/>
</appSettings>
</configuration>
Program.cs
using System;
using System.Configuration;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
System.Configuration.ConfigurationManager.AppSettings["key1"] = "changed";
var value = System.Configuration.ConfigurationManager.AppSettings["key1"];
Console.WriteLine($"This is the new key: {value}.");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.