2009-07-28 15 views
7

私は、サードパーティアプリケーションと相互運用するアプリケーションを作成しています。このアプリケーションは、DLLのメソッドを介して開発者にAPIを公開します。いくつかの時間前に、このアプリのベンダーは独自の.NETコンポーネントをプログラムに統合し始めました。実行した時点で、コンポーネントは実行時に設定を取得するためにConfigurationManagerを使用する必要がありました。複数のファイルからアプリケーション設定を読み込むためにConfigurationManagerを取得するにはどうすればよいですか?

意味:foo.exeのプログラムは、fooengine.dllを呼び出し、foo.exe.configからその設定を読み取ります。私のプログラムbar.exefooengine.dllを呼び出し、その設定をbar.exe.configから読み込みます。

これは単なる間違っています。しかし、どうすればそれを修正できますか?

foo.exe.configの設定を複製するのが簡単な回避策です。それはうまくいくでしょうが、それはの愚かなです。これは、管理上の観点から、与えられた設定をN個の異なるファイルで維持する必要があることを意味します。それは遅かれ早かれ失敗するだろう。

私の設定ファイルのappSettingsセクションにconfigSource属性を入れてみました。 (私の設定にはapplicationSettingsセクションが使用されていますが、彼らはappSettingsセクションを使用していますので、別のファイルからそのセクションを取得するだけで暮らすことができます)。ConfigurationManagerはそのようには好きではありません:configSourceのパスは、の下にあり、私のプログラムのディレクトリよりも相対的になるようにします。

自分の設定ファイルをXmlDocumentに物理的に読み込んで自分で設定することができます。しかし、今私は自分のコードを実装に密接に結合しています。彼らがapplicationSettingsセクション(これはになるはずです)に設定を移動する新しいリリースを出すと、私のコードは壊れてしまいます。

別の方法がありますか?

答えて

2

さて、私はこの問題の私の特定のバージョンで答えを見つけたと思います。

appSettings要素のfile属性をサポートしています。これにより、その要素の内容を外部ファイルから取得できます。だから私は何をすべきかは、次のとおりです。

  1. カットfoo.exe.configのうちappSettings要素とは、のは言うappSettings.xmlをしましょう、と呼ばれるそのディレクトリ内の別のファイルに貼り付けます。

  2. foo.exe.config<appSettings file="appSettings.xml"/>に新しい要素を追加してください。

  3. bar.exe.configに要素を追加します。<appSettings file="c:\program files\foo\appSettings.xml"/>

これは動作します。しかし、私のプログラムはappSettingsを全く使わないので動作します。

2

load their configuration fileでもかまいません。

+0

私は「ちょうど」が正しい言葉だとは思わない。OpenMappedMachineConfigurationを呼び出してConfigurationオブジェクトを取得できます。しかし、これはConfigurationManagerを更新しません。そして、そこから名前/値のペアのリストにさえも些細なことではありません(覚えておいてください。他のアプリケーションは、現在の "applicationSettings"セクションではなく、古いスタイルの "appSettings"セクションを使用しています - GetSectionはDefaultSectionオブジェクトとして返します) 。ファイルをXmlDocumentに読み込むコードはかなり少なくなっています。 –

関連する問題