C#のAppSettingsについて質問があります。まず、私の状況について説明します。
私のソリューションは、実行可能プログラムprogram.exe
とAssembly.dll
で構成されています。
プログラムはアセンブリを参照し、それを操作します。 Assembly-projectには、VisualStudioプロジェクト設定マネージャーでセットアップされたアプリケーション設定があります。これで、ソリューションをAssembly\bin\release
フォルダーにコンパイルすると、以前に設定した設定を含むAssembly.dll.config
ファイルがあります。
わからないことがあります。Assembly.dll
を参照するプログラムプロジェクトではCopyLocal=True
を確認しましたが、program\bin\release
フォルダにはAssembly.dll
しかありません。ただし、Assembly.dll.configファイルではありませんが、それでもAssembly.dll
は、Assembly-projectアプリケーション設定で設定した設定を認識しています。
アセンブリは常に実行可能プログラムの設定にアクセスしますが、プログラムには対応する設定がないことを何度か読みましたが、Assembly.dll.config
ファイルが存在しないのに、なぜアセンブリは正しい設定を認識しているのですか?
設定はコンパイル時にアセンブリにコンパイルされると思いますが(もちろん)、Assembly\bin\releaseフォルダーに実際にIS Assembly.dll.configファイルがあることは意味がありません。 。
このファイルをビルドアクションでprogram\bin\release
がコピーされるAssembly.dll
フォルダーにコピーしようとしましたが、同じ中にAssembly.dll
ファイルが存在する場合はAssembly.dll.config
は無視しますフォルダ。常にコンパイル時の設定を使用します。 Assembly.dll.config
ファイルの使用法がわかりません。 Assembly.dll´s
の動作に影響を与えないのに、なぜ作成されるのですか?
デフォルト値は.dllファイルに組み込まれています。もちろん、これらの設定を変更することもできますが、代わりに、configSeconds/sectionGroupのセクションでアセンブリ設定を参照することにより、program.exe構成で変更します。次に、セクションと同じ名前のXMLブロックを作成することにより、applicationSettingsでアセンブリ設定を変更できます。
セクショングループのセクションタグは、アセンブリプロジェクトのapp.configファイルから簡単にコピーできます。そうすれば、トークン、名前などが正しくなります。同じことがapplicationSettings部分にも当てはまります。アセンブリプロジェクトのapp.configからprogram.exeプロジェクトのapp.configファイルにコピーするだけです。
プログラムの例.exe.config:
<configuration>
<configSections>
... references to all dll settings ...
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MyAssemblyNamespace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
... more config stuff...
<applicationSettings>
... override your dll settings ...
<MyAssemblyNamespace.Properties.Settings>
<setting name="MaxUserNameLength" serializeAs="String">
<value>100</value>
</setting>
</MyAssemblyNamespace.Properties.Settings>
</applicationSettings>
OpenExeConfiguration メソッドを使用して、アセンブリが任意の構成ファイルを開くことは有効です。このようにして、実行中のアセンブリから暗黙的に使用できる構成ではなく、独自の構成にアクセスできます。これは一般的に行われることではありませんが、それをやめることは何もありません。
アセンブリが構成ファイルなしで正しく機能している場合は、適切な構成が見つからない場合に使用する適切なデフォルト値のセットがあるように思われます。