我正在尝试ConfigurationSection
从外部 app.config 文件的配置复制 a ,最终目标是将其合并到正在执行的应用程序当前加载的配置中。
目的是允许加载到单个 AppDomain 中的大量库从执行的应用程序接收配置,并合并它们自己的 app.config 设置,以便读取任何设置只需调用ConfigurationManager.AppSettings
or即可ConfigurationManager.GetSection()
。
我遇到的问题是克隆ConfigurationSection
.
我试过的:
ConfigurationSectionCloner
在企业库中。Configuration externalConfig = ConfigurationManager.OpenExeConfiguration(externalLibPath); var section = externalConfig.GetSection("some.section"); ConfigurationSectionCloner sectionCloner = new ConfigurationSectionCloner(); section = sectionCloner.Clone(section); Configuration localConfig = ConfigurationManager.OpenExecConfiguration(ConfigurationUserLevel.None); localConfig.Sections.Add("some.section", section);
- 然而,这运行良好,两者
localConfig.GetSection("some.section")
都是ConfigurationManager.GetSection("some.section")
空的。 - 即使调用
localConfig.Save()
(使用任何参数组合)也不会填充该部分。
- 然而,这运行良好,两者
CompositeConfigurationSourceHandler
在企业库中SystemConfigurationSource localConfig = new SystemConfigurationSource(); FileConfigurationSource externalConfig = new FileConfigurationSource(externalLibPath + ".config"); CompositeConfigurationSourceHandler ccsh = new CompositeConfigurationSourceHandler(externalConfig); ConfigurationSection section = externalConfig.GetSection("some.section"); if (!ccsh.CheckAddSection("some.section", section)) { try { localConfig.Add("some.section", section); } catch (Exception) { } }
localConfig.add()
这会在声明的行上引发异常Cannot add a ConfigurationSection that already belongs to the Configuration.
。问题是localConfig
没有那个部分。即使添加localConfig.Remove("some.section");
也无法解决。- 我还尝试了许多
*ConfigurationSource
对象组合,看看它们是否有所作为,但没有一个有所作为。
从块中复制实际的 ApplicationSettings appSettings
,甚至从块中复制 ConnectionStringsconnectionStrings
是非常简单的调用,ConfigurationManager.AppSettings.Set("some key", "some value");
但使用 ConfigurationSections 似乎并不容易。
有没有办法复制、克隆和/或只是将ConfigurationSection
一个配置从一个配置合并到另一个配置?
笔记:
- 我不想合并物理文件。一切都应该在运行时发生并且只保留在内存中。
- 我不想编写一个自定义类来表示每个 ConfigurationSection。这些部分将是通用的并且对于执行的应用程序是未知的。