簡體   English   中英

在運行時替換app.config

[英]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保存到a​​ppconfig文件中。 我也嘗試過這個想法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM