【问题标题】:C# update custom config section programmaticallyC# 以编程方式更新自定义配置部分
【发布时间】:2018-01-15 07:52:27
【问题描述】:

我可以像这样轻松地动态更新应用设置

System.Configuration.Configuration configDefault = null;
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
                        fileMap.ExeConfigFilename = configFileName;
                        configDefault = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

configDefault.AppSettings.Settings[key].Value = "some value";

如何替换内存中现有的配置部分值,我不想更新 app.config 本身?当前 app.config 如下所示:

 <SomeCustomSection>
    <group name="mygroup" isenabled ="true">
      <subscriber name="customer" log="true" isenabled="false"/>
      <subscriber name="order" log="true" isenabled="false"/>
    </group>
  </SomeCustomSection>

我正在覆盖另一个配置文件中的配置值。

SomeConfiguration sectionClient = (SomeConfiguration)configClient.GetSection("SomeCustomSection");
SomeConfiguration sectionDefault = (SomeConfiguration)configDefault.GetSection("SomeCustomSection");
foreach (var groupClient in sectionClient.Groups)
{
    var groupDefault = sectionDefault.Groups[groupClient.Name];
    groupDefault.IsEnabled = groupClient.IsEnabled;
    foreach(var sub in groupClient.Subscribers)
    {
        var subDefault = groupDefault.Subscribers[sub.Name];
        subDefault.Log = sub.Log;
        subDefault.IsEnabled = sub.IsEnabled;
    }
}

我应该如何使用更新的部分更新配置对象configDefault?比如:

configDefault.Sections["SomeCustomSection"] = sectionDefault;

【问题讨论】:

    标签: c#-4.0 configuration app-config


    【解决方案1】:

    我不知道如何在内存中做到这一点。即使您包含的AppSettings 更新代码也不会更新内存中的配置,因为如果在更改加载的映射配置中的设置后检查ConfigurationManager.AppSettings,它仍然反映文件中的内容 .exe.config。至少当我尝试您拥有的代码时它的行为是这样的,因为您正在更改的配置不是ConfigurationManager 加载的配置。

    如果您只需要更改 ConfigurationManager.OpenMappedExeConfiguration 加载的配置,那么您显示的代码已经在更改配置部分。没有什么可设置的。

    如果您需要更改后的配置在其他地方可用而不传递更改后的配置,则必须保存、刷新然后稍后将 .exe.config 文件恢复到其以前的状态:

     configDefault.Save();
     ConfigurationManager.RefreshSection(SomeCustomSection);
    

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      相关资源
      最近更新 更多