2017-08-07 83 views
0

我可以很容易地更新應用程序設置動態像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; 

回答

0

我不知道在內存中執行它的方法。即使您包含的AppSettings更新代碼也不會更新內存中的配置,因爲如果在更改加載的映射配置中的設置後檢查了ConfigurationManager.AppSettings,它仍會反映文件中的內容<應用程序> .exe.config。至少這是我在嘗試使用代碼時的行爲方式,因爲您要更改的配置不是由ConfigurationManager加載的配置。

如果只更改加載的配置ConfigurationManager.OpenMappedExeConfiguration是您需要的,那麼您顯示的代碼已經在更改配置部分。沒有什麼可以設置的。

如果您需要更改的配置是可用周圍沒有經過修改的配置在其他地方,你必須保存,以後刷新,然後<應用> .exe.config文件恢復到以前的狀態:

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