C#または.NETのアセンブリとは正確には何ですか?


101

C#または.NETのアセンブリとは何ですか?

  1. それはどこから始まり、どこで終わりますか?
  2. アセンブリについて知っておくべき重要な情報は何ですか?

5
厳密に言えば、アセンブリはC#の概念ではなく.NETの概念ではありませんか?
JeffH 2009

14
@JeffH:私が質問したとき、それはC#の概念だと思いました。今私はそれが.NETのものであることを理解しています。それでも、他の人は私のように混乱していると思うので、Googleがこの間違いに対応できるように意図的に変更していません...
Roee Adler

回答:


114

アセンブリは、コードのコンパイルされた出力であり、通常はDLLですが、EXEもアセンブリです。これは、あらゆる.NETプロジェクトのデプロイメントの最小単位です。

アセンブリには通常、MSIL(Microsoft中間言語)の.NETコードが含まれています。これは、特定のマシンで初めて実行されるときに、ネイティブコードにコンパイルされます( "JITted"-Just-In-Timeコンパイラーによってコンパイルされます)。そのコンパイル済みコードもアセンブリに格納され、後続の呼び出しで再利用されます。

アセンブリには、アイコン、ビットマップ、文字列テーブルなどのリソースも含めることができます。さらに、アセンブリには、アセンブリマニフェストのメタデータ(バージョン番号、厳密な名前、カルチャ、参照されるアセンブリなどの情報)も含まれています。

99%のケースでは、1つのアセンブリはディスク上の物理ファイルに相当します-マルチファイルアセンブリ(1つのアセンブリ、複数のファイルに分散)のケースは、かなり奇妙なエッジケースのように見えます私の5年以上の.NET開発でこれまでに出会ったことはありません。

マルチファイルアセンブリでは、DLLまたはEXEのアセンブリマニフェストは1つだけであり、MSILコードは複数のネットモジュールファイルにあります。


1
@marc_s:マルチアセンブリファイルのことだと思います。IDEを介して直接ではなく、スタジオのコマンドラインツールを介して単一のファイル内に複数のアセンブリをパッケージ化することが可能です。
グレッグD

5
アセンブリで非常に重要なことは、アセンブリマニフェストのメタデータです。マニフェストには、バージョン、厳密な名前、カルチャ、参照されるアセンブリなどの情報があります。マルチファイルアセンブリでは、dllまたはexeに1つのアセンブリマニフェストだけがあり、複数の.netmoduleファイルにMSILコードがあります。基本的に、アセンブリは> netの展開の最小単位です
softveda

@marc_s:回答に@Pratikのポイントを追加していただければ幸いです。ありがとう
Roee Adler

@rax:完了。@pratik:あなたは私を混乱させています:あなたは再び「マルチファイルアセンブリ」について話しますが、@ GregDはそれが本当に「マルチアセンブリファイル」であると述べました-それは今何ですか?(私が言ったように-私はそのような獣に遭遇したことがないので、それがファイルごとの複数のアセンブリであるか、アセンブリごとの複数のファイルであるかは少し
わかりません

3
「そのコンパイル済みコードもアセンブリに格納され、後続の呼び出しで再利用されます。」これは誤解を招く、および/またはあまり明確ではありません。コンパイルされたコードはアセンブリに「保存」されません。最初に呼び出されたときに、各メソッド/関数がネイティブコードに「差し込まれる」方法を参照していると思います。次に、アセンブリがメモリ内にある間、メソッドのネイティブコードバージョンが呼び出されます。アセンブリがアンロードされ、後で再ロードされると、jitプロセスが最初から発生します。もちろんこれは、アセンブリをネイティブコードにプリコンパイルするためにNGENを使用していないことを前提としています(非推奨)。
アッシュ

13

.NETアセンブリ

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


7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

アセンブリは、すべての.NETアプリケーションのコンパイルが成功したときにコンパイラによって自動的に生成されるファイルです。ダイナミックリンクライブラリまたは実行可能ファイルのいずれかです。アプリケーションに対して1回だけ生成され、その後のコンパイルごとにアセンブリが更新されます。


2
アセンブリは、それらを含むファイルとは異なります。
グレッグD

1
@Raghav-天国のためにカジュアルなもので写真を更新してください!ここではパスポートのポーズをとっていません。
2009年

3

ここだ .NETアセンブリ、ミニ引用のメイクアップの別の説明は:

.NETフレームワークは、メタデータとマニフェスト情報の両方を格納するモジュール、アセンブリの概念で構成されています。アセンブリには複数のモジュールを含めることができます。Visual C#は、C#コンパイラ(csc.exe)によってアセンブリに変換されるモジュールを1つだけ作成しますが、アセンブリは、アセンブリリンカー(al.exe)コマンドラインツールを介して多くの.NETモジュールをリンクできます。たとえば、各ソースコードの.csファイルをモジュールにコンパイルしてリンクし、アセンブリを形成することができます。アセンブリは、モジュールとリソースの単なるコレクションです。ただし、これらのモジュールの1つ。CLRがアセンブリを理解するには、マニフェストメタデータ(下記参照)情報を含める必要があります。
....
VS.NET内に新しい.exeまたは.dllを作成すると、binフォルダー内にファイルが表示されます。ファイルをメモ帳で開くと、意味不明な内容が出力されます。また、ファイルの構造を知らなくても16進エディターの内部にいる場合でも、ildasm.exeやCFFエクスプローラーなどのツールを使って意味を理解する必要があります。アセンブリの構造は次のとおりです。

PEヘッダー
CLRヘッダー
CLRメタデータ
CLR
ILコード
ネイティブデータ


そのリンクはどこに私を連れて行くのですか?一種の無限リダイレクト!いくつかのリダイレクトした後、それは言うページに連れて行ってくれましたこれを。投稿したURLを取得する方法もありません。
Sнаđошƒаӽ

2

答えは即座に把握するためです。

簡単に言えば、クラスと追加ファイルがある場合、それが含まれるコンパイル済みプロジェクトです。つまり、ソリューションの各プロジェクトはアセンブリです。

またはもっと技術的に、

アセンブリは、型がflesystemに格納されている場所です。アセンブリは、コードを展開するためのメカニズムです。たとえば、System.Data.dll アセンブリにはデータを管理するためのタイプが含まれています。他のアセンブリでタイプを使用するには、タイプを参照する必要があります。- ソース

どうやってそれを知るのですか?ソリューションの下のプロジェクトのプロパティを一目見ると、次の画像が表示されます。

プロジェクトをコンパイルすると、DLLまたはEXEになります。

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


1

言語コンパイラによってソースコードがコンパイルされると、マネージアセンブリとMSIL(MisroSoft Intermediate Language)が生成されます。そのアセンブリには.dllまたは.exeファイルが含まれています。Assebmlyには、プライベートアセンブリ共有アセンブリの2つのタイプがあります。共有アセンブリはGAC(グローバルアセンブリキャッシュ)に格納されるため、プライベートアセンブリが1つのアプリケーションでのみ使用できるアプリケーションフォルダーに格納されている間、どのアプリケーションでもそれを参照できます。


0

アセンブリは、公開またはアプリケーションのコンパイル時に作成されるDLLまたはEXEです。


0

アセンブリは、論理ユニットのコレクションです。論理ユニットとは、アプリケーションを構築し、.Netフレームワークを使用してそれらをデプロイするために必要なタイプとリソースを指します。基本的に、アセンブリはExeとDLLのコレクションです。移植可能で実行可能です。


-1

プログラム(プロジェクト)のソースコードを書き込んだ後、DLLまたはEXEである可能性のあるファイルがプロジェクトに依存して作成されます。1つのプロジェクトで1回だけ作成されます。これには2つのタイプがあります1:-シングル2:-共有またはマルチプログラムシングルアセンブリは単一プログラムでのみ使用され、共有はマルチプログラムに使用できます


プログラム(プロジェクト)のソースコードを書き込んだ後、DLLまたはEXEである可能性のあるファイルが作成されます(ソースコードを書き込んだ後、プロジェクトによって異なります)。そのファイルがいつ作成されるかに関してはあまり良い指標ではないようですが、BTWは問題を考えると重要ではありません。
Sнаđошƒаӽ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.