2009-10-09 10 views
6

.NET 3.5 DLLに独自の設定ファイルが必要です。このDLLは多くの異なるアプリケーションから呼び出すことができるので、設定ファイルに格納されている情報(接続文字列など)は、DLLが参照できる設定ファイルに保存する必要があります。私が望むのは、DLLを使用するときに、情報を参照するために使用される設定ファイルをDLL設定ファイルに「切り替える」必要があるということです。その後、構成情報を使用してDLLが完了すると、スイッチはデフォルトの状態に戻ります。 DLLは.NET 3.5を使用して記述されています。私はこれを行う方法を探しており、私が探し続けているのは、exeのapp.configファイルと情報をマージする方法です。私の場合は、どこのexeのapp.configファイルをこのDLLを使って修正するのかわかりません。このソリューションは、単独で行う必要があります。しかし、私の基本クラス(ビジネスオブジェクトを含む)は、接続文字列やその他の情報を設定ファイルで調べることを期待しているので、DLL設定ファイルに切り替える必要があります私はDLLを呼び出すexeアプリケーションを台無しにしないようにアクセスし、それを元に戻す。.NET 3.5 DLL独自の設定ファイルを使用

答えて

5

.NET 2.0およびアップ構成システムは、あなたに機能を提供します。必要に応じて特定の設定ファイルを読み込みます。これはもう少し作業ですが、機能します。

あなたはこのような何かをする必要があると思います:

// set up a exe configuration map - specify the file name of the DLL's config file 
ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

// now grab the configuration from the ConfigManager 
Configuration cfg = ConfigurationManager 
        .OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

// now grab the section you're interested in from the opened config - 
// as a sample, I'm grabbing the <appSettings> section 
AppSettingsSection section = (cfg.GetSection("appSettings") as AppSettingsSection); 

// check for null to be safe, and then get settings from the section 
if(section != null) 
{ 
    string value = section.Settings["Test"].Value; 
} 

ます。また、クラスライブラリDLLのための設定が構築され、あなたがそれを得ることができる場所にコピーされていることを確認する必要があります。最悪の場合、特定の設定ファイルを指定して、Visual Studioプロパティウィンドウの[出力ディレクトリにコピー]プロパティを設定して出力ディレクトリにコピーする必要があります。

また、CodeProjectの.NET 2.0設定に関するJon Ristaの3部構成のシリーズもチェックしてください。

強くお勧めします、よく書かれており、非常に便利!

マルク・

+0

これは、このアプローチを使用すると有望です。私は質問がある、私はこれを "元に戻す"必要はありませんか?私のDLLの設定はルックアップの "デフォルト"設定ですか? – user31673

+0

いいえ - ConfigurationManagerから明示的に "Configuration"オブジェクトを要求する必要はなく、この別個のオブジェクトで作業する場合にのみ、それらの個別の設定を取得します。 –

0

これに最も簡単な答えは、machine.configに値を入れることです。そうすれば、dllを使っているすべてのアプリは.net app設定クラスを通して情報にアクセスできるようになります。この方法でも、特定のアプリケーションの値をオーバーライドする必要がある場合は、メインアプリケーションのapp.configファイルでその値を上書きできます。

1

組み込みの.Net構成システムを使用してこれを行うことはできません。個別のDLLではなく、アプリケーションプロセスを構成するように設計されています(必要があります)。これを正しく実行するには、dllを「使用する」(参照を持つ)実行可能アプリケーションごとに、dllの構成設定をapp.configシステムに追加することです。 (またはmachine.configの中)だけで、彼は が Cで(のMachine.configでそれら を置くことによって達成することができるdllをuset ALL applictionsへ 設定がアクセスできる

  • :\ WINDOWS \マイクロソフト。 NET \ Frameworkの\ v2.0.50727のあなたがそのようにしたくない場合は、開き、読み取り、およびFRMの書き込みに独自のコードを記述する必要があります.NET2.0

ためCONFIG \カスタムXMLファイル(または使用するために選択した任意の形式)を使用して、これらの設定を拡張することができます。

+0

ああ、これはちょっとした作業ですが、app.configストーリーほど素晴らしいとは言えませんが、機能します。ほとんどの場合、私は同意します - ホストアプリケーションは設定を提供する必要があります。私は、別のライブラリ固有の設定が多くの意味を持つことができる場合でも、ケースを見ています。 –

1

一般的に、アプリケーションレベルで設定を行っている場合は、アプリケーションレベルでこれらの設定を生成してから、それらの設定をライブラリに浸透させる必要があります。依存関係を注入するために、初期化にいくつかのコード行を追加しますが、あなたは本質的にそれをやろうとしています。

ライブラリのすべての展開でdllだけの設定ファイルをインクルードしようとすると、意味が分かりません。

たとえば、接続を作成するときに、接続文字列を指定し、System.Dataライブラリと並行して展開する接続文字列用の個別の設定ファイルを作成しないでください。 [とにかくあなたのシステム上のGACに存在する可能性があるので、それは多量の問題を引き起こすでしょう]

0

私はこの記事が少し古いですが、私は私の2セントを投げると思った。5月のケースでは、私は、アプリケーションがDLL、設定はない供給しなければならないことに同意するだろうが知っています。私はdll固有の設定がより望ましいと思われる間に一つの状況を見つけました。

Quartz.NETのスケジューリング/タスクアプリケーションを使用します。我々は、Quartzサーバに対するジョブを作成して監視するためのインタフェースを開発しました。 Quartz.NETの素晴らしい点の1つは、あなたの "仕事"プログラムを作成してDLLにコンパイルしてQuartz.NETのサーバーフォルダにドロップすることです。そのため、Quartzは新しいDLLの使用を開始することができます設定ファイルに保持する必要のある情報がない場合は、Quartzサーバに追加の調整をする必要はありません。

設定ファイルに保存する必要がある特定の設定情報がある場合は、Quartz.NET設定ファイルに設定する必要があります。独自の設定情報を持つ複数の「ジョブ」アプリケーションを作成しました。そのため、Quartz.NETの設定ファイルはこれらの無関係の設定ですべて散在しています。 dll固有の設定ファイルを持つと、Quartz.NETサーバの混乱が大幅に軽減されます。私が見る唯一の他のオプションは、これらの個々の設定をすべて設定DBテーブルに追加することですが、コードを統合して保守するために、個別の設定ファイルが望ましいです。

ちょうどそこにそれを投げかけて考えることができます。

+0

ええと....これは本当の答えではありませんが、私はそれに洞察力のあるコメントがあります... – nalply