web-dev-qa-db-ja.com

.NET-Assembliesのデフォルト(Assembly).dll.configファイルはどのように使用されますか?

C#のAppSettingsについて質問があります。まず、私の状況について説明します。

私のソリューションは、実行可能プログラムprogram.exeAssembly.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の動作に影響を与えないのに、なぜ作成されるのですか?

15
thoros1179

デフォルト値は.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>
7
Holstebroe

OpenExeConfiguration メソッドを使用して、アセンブリが任意の構成ファイルを開くことは有効です。このようにして、実行中のアセンブリから暗黙的に使用できる構成ではなく、独自の構成にアクセスできます。これは一般的に行われることではありませんが、それをやめることは何もありません。

アセンブリが構成ファイルなしで正しく機能している場合は、適切な構成が見つからない場合に使用する適切なデフォルト値のセットがあるように思われます。

1
Sean