2009-03-13 12 views
3

私は自分のアプリケーションに取り込んでいるDLLプロジェクトをたくさん持っていて、それぞれ独自のSettings.settings/app.configを含んでいます。私は、アプリケーションをコンパイルし、デバッグのために実行すると、すべてうまく動作しますが、自分のDLLを自分の設定ファイルを読むことができない展開時間に来る。複数のクラスライブラリから構成情報を参照するにはどうすればよいですか?

私はいくつかの読書を行ってきましたが、各dllに独自の設定を読み込ませるための方法がいくつかあることが明らかになりました.1つは.dll.configをライブラリ専用にする方法ともう1つは埋め込む方法ですprocess.exe.configのdllの設定。

私はどちらかの実装に重大な問題を抱えています。誰かがこれについて良い文書を持っているかどうか疑問に思っています。ネット上で不足しているようです。

可能であれば、それぞれのライブラリの.dll.configを個別にしたいのですが、私のライブラリごとにそれぞれのセクションを読み込んで、process.exe.configを実行してください。

私はこのアプリケーションを展開するのにとても近いので誰も私を正しい方向に向けることができますが、この障害は私に重大な頭痛を引き起こしています。

編集:設定ファイルをマージすると、ライブラリでオブジェクトを初期化するときにTypeInitializer例外が発生します。これはちょうど私が遅れている可能性が高いですが、誰かがマージされた設定ファイルの実例と、複数のアセンブリからそれを読むための基本的なデモコードを持っていますか?

答えて

2

あなたが遭遇した「重要な問題」は何ですか?私はexeのconfigにdllの設定を組み込むことから始めましたが、これはうまくいったが、面倒だった。私は今、1つのDLLプロジェクトにすべての設定のものを持っています。設定をコピーするだけでなく、私がその作業を行うために必要なことは、Settingsクラスを公開することでした。

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="SharedConfig.Client.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     <!-- Begin copy from library app.config --> 
     <section name="SharedConfig.Library.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     <!-- End copy from library app.config --> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <SharedConfig.Client.Properties.Settings> 
     <setting name="Bar" serializeAs="String"> 
      <value>BarFromClient</value> 
     </setting> 
     </SharedConfig.Client.Properties.Settings> 
     <!-- Begin copy from library app.config --> 
     <SharedConfig.Library.Properties.Settings> 
     <setting name="Bar" serializeAs="String"> 
      <value>BarFromLibrary</value> 
     </setting> 
     </SharedConfig.Library.Properties.Settings> 
     <!-- End copy from library app.config --> 
    </applicationSettings> 
    </configuration> 
+0

これは最初の事例では、私はそれが問題(少し汚れていれば)に速くなると思っていたので、私はこれを取り出すことができました。しかし、私がすべての設定ファイルをマージした分、私はTypeInitializer例外を自分のライブラリ内のオブジェクトを初期化しようとし始めました。 – BenAlabaster

+0

それから私は専用の.dllを持っていることを試みました。configsと私は自分のファイルを参照するライブラリを取得することはできませんが、私は間違っている可能性が高いことを知っている - しかし、OpenExeConfigurationは、Settings.settingsファイルがないようにしたいと思わないアップデート – BenAlabaster

+0

私の経験に基づいて、各.dllが独自の設定をロードしていてもそれほど遠くになっていないのは驚きではありません。もう一方の手で、最初のシナリオの問題は私に困惑しています。あなたがそれらをマージした方法についての何か? –

0

各クラスライブラリにカスタムConfigurationSectionの構成設定を定義させます。

次に、カスタムセクションハンドラをprocess.exe.configファイルに追加します。

This MSDN articleはVBとC#の両方の例で、その説明でかなり包括的です。

+0

私は過去にこれをやらなければなりませんでした。これは、図書館とメインアセンブリを考慮すると、これが完了するまでに至っています。 – BenAlabaster

+0

ええ、かなり複雑なコードを書いています! Dmitryrは、XML構成の断片から構成セクションを生成するためのツールを作成しました。役立つ可能性があります。 http://blogs.msdn.com/dmitryr/archive/2005/10/02/476245.aspx –

0

If app.config for a DLL should be in the "main config"… what do we do with WCF References in DLLs?を参照してください:

はここで働くマージされたapp.configの例です。本当の答えは「コピー&ペースト」です。残念ながら、マイクロソフトが考えていた一般的な解決策です。場合によっては、.NET 2.0 Settingsメカニズムを使用することもできます。これは、DLL自体にデフォルト値を書き込むためです。実行時に、DLLは更新された設定を.exe.configに保存することができます。

+0

私はDLLの設定を保存する必要はありません - 彼らは読み取り専用です。問題は、マージされたprocess.exe.configファイルからDLLの設定を読み込むことができないということです。私が設定ファイルをマージすると、TypeInitializer例外が発生し始めます。 – BenAlabaster

+0

投稿を編集し、受け取った例外の例を追加する必要があります(完全なスタックトレース、お願い、すべての内部例外)。また、関連する設定スニペットも提供してください。あなたのメインアプリケーションは、configセクションタイプを含むアセンブリをロードしていますか? –

関連する問題