ConfigurationSection
外部のapp.configファイルの構成からコピーを作成しようとしていますが、その最終目標は、実行中のアプリケーションの現在ロードされている構成にマージすることです。
目的は、個々のAppDomainにロードされた多数のライブラリが、実行中のアプリケーションから構成を受け取り、独自のapp.config設定をマージして、設定の読み取りがConfigurationManager.AppSettings
またはへの単純な呼び出しになるようにすること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
、またはブロックからConnectionStringsをコピーすることはconnectionStrings
、のような呼び出しでは非常にConfigurationManager.AppSettings.Set("some key", "some value");
簡単ですが、ConfigurationSectionsではそれほど簡単ではないようです。
ConfigurationSection
ある構成から別の構成にコピー、クローン作成、および/または単純にマージする方法はありますか?
ノート:
- 物理ファイルをマージしたくありません。すべては実行時に発生し、メモリ内にのみ残る必要があります。
- 各ConfigurationSectionを表すカスタムクラスを作成したくありません。セクションは一般的であり、実行中のアプリケーションには不明です。