.NET のアセンブリ

アセンブリは、.NET ベースのアプリケーションの配置、バージョン管理、再利用、アクティベーション スコープ、およびセキュリティ権限の基本単位です。 アセンブリは、相互に連携して 1 つの論理的な機能単位を形成するように構築された型やリソースの集合です。 アセンブリは、実行可能 ( .exe) ファイルまたはダイナミック リンク ライブラリ ( .dll) ファイルの形を取る、.NET アプリケーションの構成要素です。 それらは、型の実装に関して必要な情報を共通言語ランタイムに提供します。

.NET と .NET Framework では、1 つまたは複数のソース コード ファイルからアセンブリをビルドできます。 .NET Framework では、アセンブリに 1 つまたは複数のモジュールを含めることができます。 これを使うと、より大規模なプロジェクトの計画が可能になり、複数の開発者が別々のソース コード ファイルやモジュールで作業し、それらを組み合わせて 1 つのアセンブリを作成することができます。 モジュールについて詳しくは、「方法:マルチファイル アセンブリをビルドする」を参照してください。

アセンブリには、次の特徴があります。

  • アセンブリは、 .exe または .dll ファイルとして実装されます。

  • .NET Framework をターゲットにするライブラリの場合、アセンブリをグローバル アセンブリ キャッシュ (GAC) に配置することで、それをアプリケーション間で共有することができます。 アセンブリを GAC に含めるには、アセンブリに厳密な名前を付ける必要があります。 詳細については、「厳密な名前付きアセンブリ」を参照してください。

  • アセンブリは、必要な場合にのみメモリに読み込まれます。 これらが使用されていない場合は読み込まれません。 これは、アセンブリを使用すると、大規模なプロジェクト内のリソースを効率的に管理できることを意味します。

  • リフレクションを使用して、アセンブリに関する情報をプログラムによって取得できます。 詳細については、「リフレクション (C#)」または「リフレクション (Visual Basic)」をご覧ください。

  • .NET および .NET Framework の MetadataLoadContext クラスを使用して、検査のためだけにアセンブリを読み込むことができます。 MetadataLoadContextAssembly.ReflectionOnlyLoad メソッドを置き換えます。

共通言語ランタイムのアセンブリ

アセンブリは、型の実装に関して必要な情報を共通言語ランタイムに提供します。 共通言語ランタイムにとって、型はアセンブリのコンテキストの外部には存在しません。

アセンブリは、次の情報を定義します。

  • 共通言語ランタイムが実行するコード。 各アセンブリが保持できるエントリ ポイントは 1 つだけです (DllMainWinMain、または Main)。

  • セキュリティの境界。 アクセス許可の要求および付与は、アセンブリを単位として行われます。 アセンブリのセキュリティの境界の詳細については、「アセンブリのセキュリティに関する考慮事項」を参照してください。

  • 型の境界。 すべての型の ID には、その型を含んでいるアセンブリの名前が含まれます。 したがって、あるアセンブリのスコープに読み込まれた MyType と呼ばれる型は、別のアセンブリのスコープに読み込まれた MyType と呼ばれる型とは異なります。

  • 参照スコープの境界。 アセンブリのマニフェストには、型を解決したり、リソース要求に応答したりするために使用されるメタデータが含まれています。 マニフェストは、アセンブリの外部に公開する型とリソースを指定し、依存する他のアセンブリを列挙します。 ポータブル実行可能 (PE: Portable Executable) ファイル内の MSIL (Microsoft Intermediate Language) コードにアセンブリ マニフェストが関連付けられていない場合、このコードは実行されません。

  • バージョンの境界。 アセンブリは、共通言語ランタイムの最小のバージョン管理可能単位です。 同じアセンブリ内のすべての型とリソースは、1 つの単位としてバージョン管理されます。 アセンブリ マニフェストには、任意の依存アセンブリに対して指定した、バージョンの依存関係が記述されています。 バージョン管理の詳細については、「アセンブリのバージョン管理」を参照してください。

  • 展開単位。 アプリケーションの起動時には、そのアプリケーションが最初に呼び出すアセンブリだけが必要です。 その他のアセンブリ、たとえばローカリゼーション リソースや、ユーティリティ クラスを格納するアセンブリは必要に応じて取得できます。 これにより、最初にダウンロードされるアプリを単純化し、サイズを縮小できます。 アセンブリの配置の詳細については、「アプリケーションの配置」を参照してください。

  • side-by-side 実行単位。 同じアセンブリの複数バージョンの同時実行については、「アセンブリと side-by-side 実行」を参照してください。

アセンブリを作成する

アセンブリには、静的アセンブリと動的アセンブリの 2 種類があります。 静的アセンブリは、ディスク上のポータブル実行可能 (PE) ファイルに保存されます。 静的アセンブリには、インターフェイス、クラス、およびビットマップ、JPEG ファイル、その他のリソース ファイルなどのリソースを含めることができます。 動的アセンブリを作成することもできます。動的アセンブリはメモリから直接実行され、実行前にディスクに保存されることはありません。 動的アセンブリは、実行後にディスクに保存できます。

アセンブリを作成するには、いくつかの方法があります。 Visual Studio など、 .dll ファイルや .exe ファイルを作成できる開発ツールを使用できます。 他の開発環境のモジュールを使ってアセンブリを作成するには、Windows SDK の各種ツールを使用できます。 動的アセンブリの作成には、System.Reflection.Emit などの共通言語ランタイム API も使用できます。

アセンブリをコンパイルするには、Visual Studio でビルドするか、.NET Core コマンド ライン インターフェイス ツールでビルドするか、コマンド ライン コンパイラを使用して .NET Framework アセンブリを構築します。 .NET CLI を使用してアセンブリを構築することについての追加情報は、 \.NET CLI 概要\ をご覧ください。

注意

Visual Studio でアセンブリをビルドするには、 [ビルド] メニューの [ビルド] を選択します。

アセンブリ マニフェスト

すべてのアセンブリの中に "アセンブリ マニフェスト" ファイルがあります。 目次と同じように、アセンブリ マニフェストには次が含まれます。

  • アセンブリの ID (名前とバージョン)。

  • アセンブリを構成するその他すべてのファイルについて記述するファイル テーブル (自分で作成したその他のアセンブリで .exe.dll ファイルが依存しているもの、またはビットマップや Readme ファイルなど)。

  • .dll やその他のファイルなど、すべての外部依存関係の一覧であるアセンブリ参照リスト。 アセンブリ参照には、グローバルおよびプライベートの両方のオブジェクトへの参照が含まれます。 グローバル オブジェクトは、その他のすべてのアプリケーションで利用できます。 .NET Core では、グローバル オブジェクトは特定の .NET Core ランタイムと組み合わされます。 .NET Framework では、グローバル オブジェクトはグローバル アセンブリ キャッシュ (GAC) 内にあります。 System.IO.dll は、GAC 内のアセンブリの一例です。 プライベート オブジェクトは、アプリがインストールされているディレクトリと同じレベルまたはその下のディレクトリ内に存在する必要があります。

アセンブリにはコンテンツ、バージョン管理、および依存関係に関する情報が含まれているため、それらを使用するアプリケーションは、Windows システムのレジストリのような外部ソースに依存しなくても正常に機能することができます。 アセンブリは、 .dll の競合を減らし、アプリケーションの信頼性を高め、配置を容易にします。 多くの場合、.NET ベースのアプリケーションは、ターゲット コンピューターにそのファイルをコピーするだけでインストールすることができます。 詳細については、「アセンブリ マニフェスト」を参照してください。

アセンブリに参照を追加する

アプリケーションでアセンブリを使用するには、アセンブリへの参照を追加する必要があります。 アセンブリが参照された後は、その名前空間のアクセス可能なすべての型、プロパティ、メソッド、およびその他のメンバーを、そのコードがご自分のソース ファイルの一部であるかのようにアプリケーションで使用することができます。

注意

.NET クラス ライブラリのほとんどのアセンブリは自動的に参照されます。 システム アセンブリが自動的に参照されない場合は、次のいずれかの方法で参照を追加します。

  • .NET および .NET Core の場合は、アセンブリを含む NuGet パッケージへの参照を追加します。 Visual Studio で NuGet パッケージ マネージャーを使用するか、またはアセンブリの <PackageReference> 要素を .csproj または .vbproj プロジェクトに追加します。
  • .NET Framework の場合、アセンブリへの参照を追加するには、Visual Studio の [参照の追加] ダイアログを使用するか、C# または Visual Basic コンパイラに向けてコマンド ライン オプション -reference を使用します。

C# では、1 つのアプリケーションで同じアセンブリの 2 つのバージョンを使用することができます。 詳細については、「extern エイリアス」を参照してください。

Title 説明
アセンブリの内容 アセンブリを構成する要素。
アセンブリ マニフェスト アセンブリ マニフェストのデータと、データをアセンブリに格納する方法。
グローバル アセンブリ キャッシュ GAC がアセンブリを格納および使用する方法。
厳密な名前付きアセンブリ 厳密な名前付きアセンブリの特性。
アセンブリのセキュリティに関する考慮事項 セキュリティがアセンブリに対してどのように作用するか。
アセンブリのバージョン管理 .NET Framework のバージョン管理ポリシーの概要。
アセンブリの配置 アセンブリの配置場所。
アセンブリと side-by-side 実行 複数のバージョンのランタイムやアセンブリの同時使用。
動的メソッドおよびアセンブリの出力 動的アセンブリの作成方法。
ランタイムがアセンブリを検索する方法 実行時に .NET Framework でアセンブリ参照がどのように解決されるか。

関連項目

System.Reflection.Assembly

関連項目