2012-02-21 1 views
3

MonoでLinux上で動作するように移植されているプロジェクトがあります。プロジェクトには、複数のC#ライブラリが含まれています。これらのライブラリには、ユーザースコープのアプリケーション設定(VS2008経由で自動的に生成されます)があります。結局のところ、このプロジェクトはWindowsでは.NETで、Ubuntu 10.04ではMonoで実行されます。Monoで複数のC#ライブラリのアプリケーション設定(Linux)

のWindowsで動作し、アプリケーションの設定は、各ライブラリに個別の構成セクションを持つ単一のuser.configファイルに格納されている場合:単一user.configが作成され、Ubuntuので

<configuration> 
    <configSections> 
    <sectionGroup name="userSettings" type="UserSettingsGroup ...> 
     <section name="LibFoo.Properties.Settings" type="ClientSettingsSection ... /> 
     <section name="LibBar.Properties.Settings" type="ClientSettingsSection ... /> 
    </sectionGroup> 
    </configSections> 
    <userSettings> 
    <LibFoo.Properties.Settings> 
     <setting name="strFoo" serializeAs="String"> 
     <value>An example string value.</value> 
     </setting> 
    </LibFoo.Properties.Settings> 
    <LibBar.Properties.Settings> 
     <setting name="strBar" serializeAs="String"> 
     <value>An example string value.</value> 
     </setting> 
    </LibBar.Properties.Settings> 
    </userSettings> 
</configuration> 

、しかし、私は見つけます唯一つのセクションがどのライブラリ用に作成されていることは、最初Properties.Settings.Save()を呼び出し、すべてのライブラリは、同じセクションを使用します。

<configuration> 
    <configSections> 
    <sectionGroup name="userSettings" type="UserSettingsGroup ... > 
     <section name="LibFoo.Properties.Settings" type="ClientSettingsSection ... /> 
    </sectionGroup> 
    </configSections> 
    <userSettings> 
    <LibFoo.Properties.Settings> 
     <setting name="strFoo" serializeAs="String"> 
     <value>An example string value.</value> 
     </setting> 
     <setting name="strBar" serializeAs="String"> 
     <value>An example string value.</value> 
     </setting> 
    </LibFoo.Properties.Settings> 
    </userSettings> 
</configuration> 

ライブラリの中で設定が同じ名前を持っている場合これは特に厄介になります。

これはMonoのバグですか、あるいは私のライブラリの設定に別のセクションを生成するためにMonoを変更する必要がありますか?

  • Ubuntuのv10.04
  • モノランタイムv2.10.8
  • のVisual Studio 2008 Professionalの
+0

あなたが同じ名前を持っている、または同じ名前のライブラリを持っているなら、名前空間を完全修飾することを考えましたか? – MethodMan

+0

@DJ KRAZE - 私があなたの提案を理解すれば、私はあなたを欺いたかもしれないと思います。同じ名前のライブラリはありませんが、アプリケーションの設定は可能です。 – walkingTarget

答えて

0

同じ設定名の問題を回避するには、で構成設定を入れて試すことができます各DLLの設定ファイル。あなたの設定ファイルは、 "MyDLL.dll.config"という名前(DLLの名前は "MyDLL.dll"とする)を持つ必要があり、DLLと同じフォルダにある必要があります。

(モノの下でテストされません)

DLLのconfigファイルに書き込むには:

あなたが拡張メソッド「保存」することができ、この方法の使用反射でアセンブリ名を取得するために(アセンブリを呼び出すと、現在のアセンブリではありません)、SaveAsを使用して構成を保存します。この方法で、dll設定ファイルに保存する方法があります。

+0

残念ながら、これはMonoでは動作しません。アプリケーションは〜/ .local/shareの単一の.configファイルに書き込みを行い、アセンブリのローカルの* .configファイルは変更しません。しかし、良いアイデア。 – walkingTarget

+0

@ walkkingTarget:Saveメソッドで保存する代わりに、SaveAsを使用して "MyDLL.dll.config"を使用して保存できますか? 拡張メソッドを "保存"し、このメソッドでリフレクションを使用してアセンブリ名(現在のアセンブリではない呼び出しアセンブリ)を取得し、SaveAsを使用して構成を保存します。この方法では、dll設定ファイルに保存する方法があります。 – Fabske

+0

拡張メソッドは、回避策のための多くの扉を開いています。提案していただきありがとうございます。その情報をあなたの答えに加えることができれば、私はあなたに賞金を授与します。 – walkingTarget

関連する問題