C#更新自定义配置部分编程

问题描述:

我可以很容易地更新应用程序设置动态像C#更新自定义配置部分编程

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; 

我不知道在内存中执行它的方法。即使您包含的AppSettings更新代码也不会更新内存中的配置,因为如果在更改加载的映射配置中的设置后检查了ConfigurationManager.AppSettings,它仍会反映文件中的内容<应用程序> .exe.config。至少这是我在尝试使用代码时的行为方式,因为您要更改的配置不是由ConfigurationManager加载的配置。

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

如果您需要更改的配置是可用周围没有经过修改的配置在其他地方,你必须保存,以后刷新,然后<应用> .exe.config文件恢复到以前的状态:

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