回答:
最初にアセンブリに厳密な名前を付けることの利点を挙げましょう。
アセンブリに厳密な名前を付けると、アセンブリをグローバルアセンブリキャッシュ(GAC)に含めることができます。したがって、複数のアプリケーション間で共有することができます。
厳密な名前を付けると、そのアセンブリの一意の名前が保証されます。したがって、他のユーザーが同じアセンブリ名を使用することはできません。
厳密な名前は、アセンブリのバージョン系統を保護します。厳密な名前を付けると、アセンブリの後続バージョンを誰も作成できないようにすることができます。アプリケーションユーザーは、ロードするアセンブリのバージョンが、アプリケーションのビルドに使用されたバージョンを作成したのと同じ発行元からのものであることを確認します。
Microsoft による厳密な名前付けの詳細については、厳密な名前付きアセンブリ(MSDN)を参照してください。
通常のアセンブリではできないことは何ですか?
Nugetの台頭から始まったすべての議論は、強力な名前付きアセンブリを完全に取り除くことを示唆していたので、私の会社はそれを試み、アプリケーション設定に関しては動作の大幅な変更に遭遇しました。
VisualStudio(System.Configuration.ApplicationSettingsBaseを継承)によって提供される自動アプリまたはユーザースコープのアプリケーション設定を使用する場合、EXEという名前の厳密な名前のEXEは、%LOCALAPPDATA%内に正確に1つのディレクトリを作成します。あります。
ただし、厳密な名前がない場合、EXEの場所(=パス)は、DEBUGとRELEASEビルドですでに異なるハッシュ値を作成するために使用され、「YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf」のような名前の%LOCALAPPDATA%内に多くのディレクトリを作成します。これにより、更新ごとにインストールディレクトリが変化するClickOnce配置では使用できなくなります。
厳密な名前がないと、構成ファイルでバインディングリダイレクトを使用できないことを追加します。
これは機能しません:
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
公開鍵トークンが必要です
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>