.NETアセンブリとは何ですか?


193

.NETアセンブリとは何ですか?ネットで閲覧したが、その定義が理解できない。


11
C#を介してCLRを読んでください。あなたはそれのすべてを最後まで知るでしょう。私はこの本を強くお勧めします。
David Neale

回答:


169

より簡単に言うと、.NETランタイム環境で実行できる(プリコンパイルされた)コードのチャンクです。.NETプログラムは、1つ以上のアセンブリで構成されています。


30
@KimJongWoo-いいえ、Jarファイルはコンパイルされたバイトコードファイルを含む単なるzipファイルです。アセンブリはPE(Portable Executable Format)ファイル(つまり、DLLまたはEXE)ですが、概念的には同様の目的に役立ちます。
Erik Funkenbusch 2013年

それは.classJavaの世界のファイルのようなものですか?
mljrg 2018年

245

アセンブリは、.netアプリケーションのデプロイメントの最小単位です。これはdllまたはexeです。
主に2つのタイプがあります。

  1. プライベートアセンブリ: 1つのアプリケーションのみの唯一のプロパティであるdllまたはexe。通常、アプリケーションのルートフォルダーに格納されます

  2. パブリック/共有アセンブリ: 一度に複数のアプリケーションで使用できるDLLです。共有アセンブリはGAC、つまりグローバルアセンブリキャッシュに格納されます。

難しいですね。Naa ....
GACは単にC:\ Windows \ Assemblyフォルダーであり、PCにインストールされているすべてのソフトウェアのパブリックアセンブリ/ dllを見つけることができます。

また、3番目に知られていないタイプのアセンブリもあります。サテライトアセンブリです。
サテライトアセンブリには、画像などの静的オブジェクトと、アプリケーションに必要なその他の実行不可能なファイルのみが含まれています。

これが読者の役に立つことを願っています!


3
場所は、.NET 4.0のために異なることに注意してください:stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill

それは遅くなる可能性があります。フォルダがそれらの数千を取得した後、ウィンドウはディレクトリツリーをウォークするか、単にディレクトリを読み取ろうとすると遅くなります。
ジムマイケルズ

@mangeshkt-あるアプリケーションのdllをコピーして別のアプリケーションのルートディレクトリに配置することは可能ですか?最初のアプリケーションの機能を使用できますか?
Shivam657 2015

57

アセンブリ

アプリケーションをコンパイルすると、作成されたMSILコードはアセンブリに格納されます。アセンブリには、他のプログラムを必要とせずにWindowsから直接実行できる実行可能アプリケーションファイル(ファイル拡張子は.exe)と、他のアプリケーションで使用するためのライブラリ(拡張子が.dll)の両方が含まれます。

MSILに加えて、アセンブリにはメタ情報(つまり、アセンブリに含まれる情報に関する情報。メタデータとも呼ばれます)およびオプションのリソース(サウンドファイルや画像など、MSILが使用する追加データ)も含まれます。メタ情報により、アセンブリを完全に自己記述的にすることができます。アセンブリを使用するために他の情報は必要ありません。つまり、必要なデータをシステムレジストリに追加できないなどの状況を回避します。これは、他のプラットフォームで開発するときにしばしば問題でした。

つまり、アプリケーションのデプロイは、多くの場合、ファイルをリモートコンピュータのディレクトリにコピーするのと同じくらい簡単です。ターゲットシステムでは追加情報は必要ないため、このディレクトリから実行可能ファイルを実行するだけで済みます(.NET CLRがインストールされている場合)。

もちろん、アプリケーションを1か所で実行するために必要なすべてを必ずしも含める必要はありません。複数のアプリケーションが必要とするタスクを実行するコードを記述する場合があります。このような状況では、多くの場合、すべてのアプリケーションがアクセスできる場所に再利用可能なコードを配置すると便利です。.NET Frameworkでは、これはグローバルアセンブリキャッシュ(GAC)です。コードをGACに配置するのは簡単です。コードを含むアセンブリを、このキャッシュを含むディレクトリに配置するだけです。


より明確にするために、「アプリケーションをコンパイルすると、作成されたMSILコードはアセンブリに格納されます」。追加してアセンブリの内容を表示するには、ILSPYを使用できます。
Sandeep

33

アセンブリは、.NET Frameworkのクラスが格納されているハードドライブ上の実際の.dllファイルです。たとえば、ASP.NET Frameworkに含まれるすべてのクラスは、System.Web.dllという名前のアセンブリにあります。

より正確には、アセンブリは、.NET Frameworkの展開、セキュリティ、およびバージョン管理の主要な単位です。アセンブリは複数のファイルにまたがることができるため、アセンブリは「論理」dllと呼ばれることがよくあります。

注意

.NET Framework(バージョン2.0)には51のアセンブリが含まれています。

アセンブリには、プライベートと共有の2つのタイプがあります。プライベートアセンブリは、単一のアプリケーションでのみ使用できます。一方、共有アセンブリは、同じサーバー上にあるすべてのアプリケーションで使用できます。

共有アセンブリは、グローバルアセンブリキャッシュ(GAC)にあります。たとえば、System.Web.dllアセンブリと、.NET Frameworkに含まれている他のすべてのアセンブリは、グローバルアセンブリキャッシュにあります。

注意

グローバルアセンブリキャッシュは、物理的にコンピューターの\ WINDOWS \ Assemblyフォルダーにあります。\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727フォルダーには、すべてのアセンブリの個別のコピーがあります。アセンブリの最初のセットは実行時に使用され、2番目のセットはコンパイル時に使用されます。

アプリケーションのアセンブリに含まれるクラスを使用する前に、アセンブリへの参照を追加する必要があります。デフォルトでは、ASP.NETアプリケーションは、グローバルアセンブリキャッシュに含まれる最も一般的なアセンブリを参照します。

mscorlib.dll

System.dll

System.Configuration.dll

System.Web.dll

System.Data.dll

System.Web.Services.dll

System.Xml.dll

System.Drawing.dll

System.EnterpriseServices.dll

System.Web.Mobile.dll

.NET Frameworkで特定のクラスを使用するには、2つのことを行う必要があります。最初に、アプリケーションはクラスを含むアセンブリを参照する必要があります。次に、アプリケーションはクラスに関連付けられた名前空間をインポートする必要があります。

ほとんどの場合、最も一般的なアセンブリは自動的に参照されるため、必要なアセンブリの参照について心配する必要はありません。ただし、特殊なアセンブリを使用する必要がある場合は、アセンブリに参照を明示的に追加する必要があります。たとえば、System.DirectoryServices名前空間のクラスを使用してActive Directoryとやり取りする必要がある場合は、System.DirectoryServices.dllアセンブリへの参照をアプリケーションに追加する必要があります。

.NET Framework SDKドキュメントの各クラスエントリには、クラスに関連付けられているアセンブリと名前空間がリストされています。たとえば、ドキュメントでMessageQueueクラスを検索すると、このクラスがSystem.Messaging.dllアセンブリにあるSystem.Messaging名前空間にあることがわかります。

Visual Web Developerを使用している場合は、メニューオプションの[Webサイト]、[参照の追加]を選択し、参照する必要のあるアセンブリの名前を選択することで、アセンブリへの参照を明示的に追加できます。たとえば、System.Messaging.dllアセンブリへの参照を追加すると、リスト1.4のWeb構成ファイルがアプリケーションに追加されます。

例えば。Web.Config

enter code here

Visual Web Developerを使用しない場合は、上記の例のファイルを手動で作成して、System.Messaging.dllアセンブリへの参照を追加できます。


1
受け入れられた答えよりもはるかに技術的であり、これは受け入れられた答えであるべきです。
sparkyShorts

8

ウィキペディアは言う必要があります:

Microsoft .NETフレームワークでは、アセンブリは、展開、バージョン管理、およびセキュリティで使用するために部分的にコンパイルされたコードライブラリです。プロセスアセンブリ(EXE)とライブラリアセンブリ(DLL)の2つのタイプがあります。プロセスアセンブリは、ライブラリアセンブリで定義されたクラスを使用するプロセスを表します。.NETアセンブリにはCILのコードが含まれています。これは通常CLI言語から生成され、CLRジャストインタイムコンパイラーによって実行時にマシン言語にコンパイルされます。アセンブリは、1つ以上のファイルで構成できます。コードファイルはモジュールと呼ばれます。アセンブリには複数のコードモジュールを含めることができ、異なる言語を使用してコードモジュールを作成することができるため、技術的には複数の異なる言語を使用してアセンブリを作成できます。

あなたが本当に閲覧したなら、あなたが理解していないことを明確にすると助けになるでしょう


7

これを見てください:

Microsoft .NETフレームワークでは、アセンブリは、展開、バージョン管理、およびセキュリティで使用するために部分的にコンパイルされたコードライブラリです


7

ILコード内にあるクラス、インターフェース、列挙型などの物理的なコレクション。.EXEまたは.DLLファイルのいずれか.EXEは実行可能ファイルであり、.DLLは任意の.net対応言語で動的に使用できます。


6

アセンブリは、タイプやその他のリソースで構成されるランタイムユニットです。アセンブリ内のすべてのタイプのバージョン番号は同じです。

多くの場合、1つのアセンブリには名前空間が1つしかなく、1つのプログラムによって使用されます。ただし、複数の名前空間にまたがることがあります。また、1つの名前空間が複数のアセンブリに分散する場合もあります。大規模な設計では、アセンブリは、マニフェスト(つまり、目次)によってまとめられた複数のファイルで構成される場合があります。

C#では、アセンブリは.Netアプリケーションの最小のデプロイメントです。dllまたはexeを使用できます。2つのタイプがあります。1.プライベートアセンブリ2.パブリック/共有アセンブリ


6

受け入れられた答えに加えて、私はあなたに例を挙げたいです

たとえば、私たちはすべて使用します

System.Console.WriteLine()

しかし、System.Console.WriteLine!のコードはどこにありますか?
実際にコンソールにテキストを配置するコードはどれですか?

Consoleクラスのドキュメントの最初のページを見ると、上部付近に以下が表示されます。アセンブリ:mscorlib(mscorlib.dll内)これは、Consoleクラスのコードがassem-blyにあることを示していますmscorlibという名前です。アセンブリは複数のファイルで構成できますが、この場合はダイナミックリンクライブラリmscorlib.dllの1つのファイルのみです。

mscorlib.dllファイルは.NETで非常に重要であり、.NETのクラスライブラリのメインDLLであり、すべての基本的な.NETクラスと構造が含まれています。

CまたはC ++を知っている場合は、通常、ヘッダーファイルを参照する#includeディレクティブが先頭に必要です。インクルードファイルは、関数プロトタイプをコンパイラに提供します。対照的に、C#コンパイラはヘッダーファイルを必要としません。コンパイル中に、C#コンパイラはmscorlib.dllファイルに直接アクセスし、そのファイル内のメタデータから、そこで定義されているすべてのクラスとその他の型に関する情報を取得します。

C#コンパイラは、mscorlib.dllが実際にSystemという名前空間にConsoleという名前のクラスを含み、文字列型の単一の引数を受け入れるWriteLineという名前のメソッドを持つことを確立できます。

C#コンパイラはWriteLine呼び出しが有効であると判断でき、コンパイラは実行可能ファイル内のmscorlibアセンブリへの参照を確立します。

デフォルトでは、C#コンパイラはmscorlib.dllにアクセスしますが、他のDLLの場合は、クラスが配置されているアセンブリをコンパイラに通知する必要があります。これらは参照として知られています。

はっきりしているといいですね!

DotNetBookZero Charles pitzoldから


5

MSDNには良い説明があります:

アセンブリは、.NET Frameworkアプリケーションの構成要素です。これらは、デプロイメント、バージョン管理、再利用、アクティブ化のスコープ、およびセキュリティ許可の基本単位を形成します。アセンブリは、連携して機能の論理ユニットを形成するように構築されたタイプとリソースのコレクションです。アセンブリは、型の実装を認識するために必要な情報を共通言語ランタイムに提供します。ランタイムにとって、型はアセンブリのコンテキストの外には存在しません。


4

アセンブリは、機能の論理ユニットを形成するタイプとリソースのコレクションです。.NET Frameworkのすべての型はアセンブリに存在する必要があります。共通言語ランタイムは、アセンブリ外の型をサポートしていません。Visual Basic .NETでMicrosoftWindows®アプリケーション、Windowsサービス、クラスライブラリ、またはその他のアプリケーションを作成するたびに、単一のアセンブリを構築します。各アセンブリは、.exeまたは.dllファイルとして保存されます。

ソース:https : //msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

私のようなJavaの背景を持つ人のために、次の図が概念を明確にすることを願っています-

アセンブリは、jarファイル(複数の.classファイルを含む)に似ています。コードは既存のアセンブリを参照することも、コード自体を他のコードが参照して使用するためのアセンブリとして公開することもできます(これは、プロジェクトの依存関係に追加できるJavaのjarファイルと考えることができます)。

結局のところ、アセンブリは、CLRがインストールされている任意のオペレーティングシステムで実行できるコンパイル済みコードです。これは、.classファイルまたはバンドルされたjarが、JVMがインストールされている任意のマシンで実行できると言うのと同じです。

ここに画像の説明を入力してください


2

.Netでは、アセンブリは次のようになります。

種々のコレクション管理含有部分Types (or Classes)Resources (Bitmaps/Images/Strings/Files)NamespacesConfig FilesコンパイルPrivately又はPublicly; localまたはShared (GAC)フォルダーに展開され ます。discover-able他のもの programs/assembliesと; バージョンアップすることができます。


2

アセンブリは、Microsoft.Netでのバージョン管理のセキュリティ、展開、およびコードの再利用性の最小単位であるため。

を含む:

- Assembly Identity
- Manifest
- Metadata
- MSIL Code
- Security Information
- Assembly Header

1

アセンブリは、.NET Frameworkを使用したプログラミングの基本的な部分です。これには、CLRがMSIL(Microsoft Intermediate Language)コードを実行するコードが含まれています。このコードには、関連付けられたアセンブリマニフェストがない場合、ポータブル実行可能ファイルは実行されません。


1

.NETアプリケーションは、任意の数のアセンブリをつなぎ合わせることによって構築されます。簡単に言うと、アセンブリは、バージョン(クラス、インターフェイス、構造など)のコレクションとオプションのリソース(画像、文字列テーブルなど)を含むバージョン付きの自己記述型バイナリ(DLLまたはEXE)にすぎません。現在注意深く注意しなければならないことの1つは、.NETアセンブリの内部構成は、(共有ファイル拡張子に関係なく)従来のCOMサーバーの内部構成とはまったく異なることです。


1

.NETでは、ソースコードをコンパイルすると、Visual Studioでアセンブリが生成されます。アセンブリは、マニフェストとIL(中間言語)の2つの部分で構成されます。マニフェストにアセンブリメタデータが含まれているとは、アセンブリのバージョン要件、セキュリティID、アセンブリを構成するすべてのファイルの名前とハッシュを意味します。ILには、クラス、コンストラクター、メインメソッドなどに関する情報が含まれています。



1

Visual Studioソリューションは、1つ以上のプロジェクトで構成されています。例:コンソールプロジェクトはアセンブリを生成できます。アセンブリは、顧客に出荷できる論理的にはコードのチャンクであり、物理的には.EXE(実行可能プログラム)または.DLL(他のプログラムで再利用可能)です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.