私は、サードパーティアプリケーションと相互運用するアプリケーションを作成しています。このアプリケーションは、DLLのメソッドを介して開発者にAPIを公開します。いくつかの時間前に、このアプリのベンダーは独自の.NETコンポーネントをプログラムに統合し始めました。実行した時点で、コンポーネントは実行時に設定を取得するためにConfigurationManager
を使用する必要がありました。複数のファイルからアプリケーション設定を読み込むためにConfigurationManagerを取得するにはどうすればよいですか?
意味:foo.exe
のプログラムは、fooengine.dll
を呼び出し、foo.exe.config
からその設定を読み取ります。私のプログラムbar.exe
もfooengine.dll
を呼び出し、その設定をbar.exe.config
から読み込みます。
これは単なる間違っています。しかし、どうすればそれを修正できますか?
にfoo.exe.config
の設定を複製するのが簡単な回避策です。それはうまくいくでしょうが、それはの愚かなです。これは、管理上の観点から、与えられた設定をN個の異なるファイルで維持する必要があることを意味します。それは遅かれ早かれ失敗するだろう。
私の設定ファイルのappSettings
セクションにconfigSource
属性を入れてみました。 (私の設定にはapplicationSettings
セクションが使用されていますが、彼らはappSettings
セクションを使用していますので、別のファイルからそのセクションを取得するだけで暮らすことができます)。ConfigurationManager
はそのようには好きではありません:configSource
のパスは、の下にあり、私のプログラムのディレクトリよりも相対的になるようにします。
自分の設定ファイルをXmlDocument
に物理的に読み込んで自分で設定することができます。しかし、今私は自分のコードを実装に密接に結合しています。彼らがapplicationSettings
セクション(これはがになるはずです)に設定を移動する新しいリリースを出すと、私のコードは壊れてしまいます。
別の方法がありますか?
私は「ちょうど」が正しい言葉だとは思わない。OpenMappedMachineConfigurationを呼び出してConfigurationオブジェクトを取得できます。しかし、これはConfigurationManagerを更新しません。そして、そこから名前/値のペアのリストにさえも些細なことではありません(覚えておいてください。他のアプリケーションは、現在の "applicationSettings"セクションではなく、古いスタイルの "appSettings"セクションを使用しています - GetSectionはDefaultSectionオブジェクトとして返します) 。ファイルをXmlDocumentに読み込むコードはかなり少なくなっています。 –