app.configファイルが複数の場所に分散されたさまざまな構成フラグメントから動的に構築される構成システムを作成しています。現在、システムは次のように機能します。
- Bootstrapperは構成ファイルを作成します。
- Bootstrapperは、新しい構成ファイルを構成ファイルとして使用して、新しいAppDomainを初期化します。
- その結果、新しいAppDomainは新しい構成ファイルを使用するように構成され、すべて正常に機能します。
この複数のAppDomainアプローチから離れたいと思います。特にアンマネージライブラリやその他のレガシーコードに関しては、複雑さが増します。
1つのAppDomainに移動すると、ワークフローは次のように変更されます。
- Bootstrapperは構成ファイルを作成します。
- Bootstrapperは、構成ファイルを独自の構成ファイルにマージします。
- Bootstrapperは、ConfigurationManagerキャッシュを更新します。
- Bootstrapperは、同じAppDomainでメインアプリを起動します。
ConfigurationManagerはセクションをメモリにキャッシュしているようです。したがって、たとえば、手順3の前にAppSettingsを読んだ場合は、次のように呼び出す必要があります。ConfigurationManager.RefreshSection("appSettings");
実際、ブートストラッパーによって使用されたセクションが更新されていることを確認する必要があります。
新しい構成ファイルのすべての構成セクションを繰り返し処理して強制的に更新することはできますが、これにより、構成マネージャーは構成ファイルで参照されているすべてのアセンブリを強制的にロードします。可能であればこれを延期したいと思います。ConfigurationManagerが現在メモリに持っているものを無効にする方法はありますか?