C#または.NETのアセンブリとは何ですか?
アセンブリはコードのコンパイル済み出力であり、通常はDLLですが、EXEもアセンブリです。これは、あらゆる.NETプロジェクトの展開の最小単位です。
アセンブリには通常、MSIL(Microsoft Intermediate language)の.NETコードが含まれています。これは、特定のマシンで初めて実行されるときにネイティブコード(「JITted」-Just-In-Timeコンパイラーによってコンパイル)にコンパイルされます。コンパイルされたコードはアセンブリにも保存され、以降の呼び出しで再利用されます。
アセンブリには、アイコン、ビットマップ、文字列テーブルなどのリソースを含めることもできます。さらに、アセンブリのアセンブリマニフェストには、バージョン番号、厳密な名前、カルチャ、参照されるアセンブリなどのメタデータも含まれます。
99%のケースでは、1つのアセンブリがディスク上の物理ファイルに相当します。マルチファイルアセンブリ(1つのアセンブリ、複数のファイルに分散されている)の場合は、かなり奇妙なEdgeケースに見えます。 5年以上の.NET開発でこれまでに遭遇したことはありません。
マルチファイルアセンブリでは、DLLまたはEXEおよび複数のnetmoduleファイル内のMSILコードに1つのアセンブリマニフェストしかありません。
Microsoft .NETフレームワークでは、アセンブリは、展開、バージョン管理、およびセキュリティで使用するために部分的にコンパイルされたコードライブラリです。
http://www.codeguru.com/columns/csharp_learning/article.php/c5845
アセンブリは、すべての.NETアプリケーションが正常にコンパイルされると、コンパイラによって自動的に生成されるファイルです。ダイナミックリンクライブラリまたは実行可能ファイルのいずれかです。これは、アプリケーションに対して1回だけ生成され、その後のコンパイルごとにアセンブリが更新されます。
Here's .NETアセンブリの構成の別の説明、ミニクォート:
.NETフレームワークは、メタデータとマニフェスト情報の両方を保存するモジュール、アセンブリの概念で構成されています。アセンブリには複数のモジュールを含めることができます。 Visual C#は、C#コンパイラ(csc.exe)によってアセンブリに変換されるモジュールを1つしか作成しませんが、アセンブリは、アセンブリリンカー(al.exe)コマンドラインツールを介して多くの.NETモジュールをリンクできます。たとえば、ソースコードの各.csファイルをモジュールにコンパイルし、リンクしてアセンブリを形成することができます。アセンブリは、モジュールとリソースの単なるコレクションです。ただし、これらのモジュールの1つには、CLRがアセンブリを理解するためのマニフェストメタデータ(以下を参照)情報が含まれている必要があります。
....
VS.NET内に新しい.exeまたは.dllを作成すると、binフォルダー内にファイルが表示されます。それをメモ帳で開くと、意味がわからなくなったり、ファイルの構造を知らなくても16進エディターの内部でさえ、ildasm.exeやCFF Explorerなどのツールが必要です。アセンブリの構造は次のとおりです。PEヘッダー
CLRヘッダー
CLRメタデータ
CLR
ILコード
ネイティブデータ
ソースコードが言語コンパイラによってコンパイルされると、Managed AssemblyおよびMSIL(MisroSoft Intermediate Language)が生成されます。そのアセンブリには。dllまたは.exeファイルが含まれます。 Assebmlyには、2つのタイププライベートアセンブリおよび共有アセンブリがあります。共有アセンブリはGAC(グローバルアセンブリキャッシュ)に格納されるため、どのアプリケーションでもプライベートアセンブリは、1つのアプリケーションのみが使用できるアプリケーションフォルダーに格納されている間に参照します。
アセンブリはDLLまたはEXEであり、発行またはアプリケーションのコンパイル時に作成されます。