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);