在运行时替换app.config

问题描述 投票:0回答:1

这是我的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吗?

提前致谢。

c# app-config
1个回答
0
投票

更改应用程序配置文件必须在应用程序启动之前完成,因为当您的应用程序仅被引导时,运行时会读取某些键,而其他键将变为只读。

您只能通过引用AppSettings程序集动态更改System.Configuration节的配置条目。所有其他键都是设计为只读。

如果您不想在启动应用程序之前更改配置,则需要考虑所有涉及的实体:谁将要读取您的连接字符串?如果是你,你可以简单地将它存储在其他地方甚至是AppSettings键。相反,如果外部组件需要从配置文件中读取它,则您无法更改应用程序的体系结构,以便在运行应用程序之前使用包装器执行更改。

在引用qazxsw poi程序集之后,可以通过这种方式更改qazxsw poi密钥(这很重要)。

App.config中

AppSettings

Program.cs中

System.Configuration
© www.soinside.com 2019 - 2024. All rights reserved.