1

以下の質問に、どなたか答えていただけないでしょうか。私はc#言語を使用しています。

  1. アセンブリを .ddl または .exe ファイルとして呼び出すことはできますか?
  2. アセンブリ マニフェストをアセンブリとして呼び出すことはできますか?
  3. アセンブリ、メタ データ、アセンブリ マニフェストの違いは何ですか?
  4. 言ってもいい

    .DLL または .EXE = アセンブリ + メタ データ + アセンブリ マニフェスト + MSIL コード。

これらの質問をクリアするのを手伝ってください。

4

3 に答える 3

4

1-アセンブリ単一の.DLLまたは.EXEファイルにすることができますが、すべての.DLLおよび.EXEがアセンブリであるとは限りません。アセンブリは.NETFrameworkに固有です。.EXEアセンブリと.DLLアセンブリはどちらも、.NETアプリケーションから参照またはロードできます。

2--アセンブリマニフェストは、アセンブリを説明するメタデータを含むアセンブリの一部にすぎません。 MSDNからアセンブリマニフェスト:

  • アセンブリを構成するファイルを列挙します。

  • アセンブリのタイプとリソースへの参照が、宣言と実装を含むファイルにどのようにマップされるかを管理します。

  • アセンブリが依存する他のアセンブリを列挙します。

  • アセンブリのコンシューマーとアセンブリの実装の詳細の間の間接的なレベルを提供します。

  • アセンブリを自己記述的にレンダリングします。

特定のアセンブリに関連付けられているメタデータを変更する必要がある場合は、コードからアセンブリマニフェストのいくつかの側面を追加および変更できます。アセンブリマニフェストは、それ自体の物理ファイルとして保存できますが、それでもアセンブリの一部と見なされます。

3-アセンブリは、CILコード、CILコードで定義されたタイプを説明するメタデータ、アセンブリを説明するメタデータであるアセンブリマニフェスト、およびアセンブリに必要な静止画像などの他のリソースで構成されます。したがって、アセンブリマニフェストは、メタデータと同様に、アセンブリの一部にすぎません。

4-ほぼ。アセンブリ=MSILコード+アセンブリマニフェスト+タイプメタデータ+リソース。

アセンブリは、.EXEファイルまたは.DLLファイルのいずれかにコンパイルできますが、複数のファイルで構成することもできます。

于 2013-03-19T12:58:40.657 に答える
3

これらの概念 (簡単に) から始めましょう。そうすれば、答えが得られます。
コンパイラは、構文チェッカーであり、「正しいコード」アナライザーです。.Net プラットフォームでは、使用するコンパイラに関係なく、結果はマネージ モジュールになります。マネージ モジュールは、標準の 32 ビット Microsoft Windows ポータブル実行可能 (PE32) ファイルまたは標準 64 ビット Windows ポータブル実行可能 (PE32+) ファイルであり、実行には CLR が必要です。ここに画像の説明を入力

IL コードコンパイラがソース コードをコンパイルしたときに生成されたコード。実行時に、CLR は IL をネイティブ CPU 命令にコンパイルします。

メタデータすべてのマネージ モジュールには、メタデータ テーブルが含まれています。テーブルには主に 2 つのタイプがあります。ソース コードで定義された型とメンバーを説明するテーブルと、ソース コードで参照される型とメンバーを説明するテーブルです。

アセンブリは抽象的な概念であり、最初は把握するのが難しい場合があります。まず、アセンブリは 1 つ以上のモジュールまたはリソース ファイルの論理グループです。次に、アセンブリは、再利用、セキュリティ、およびバージョン管理の最小単位です。コンパイラまたはツールで行う選択に応じて、単一ファイルまたは複数ファイルのアセンブリを生成できます。CLR の世界では、アセンブリはコンポーネントと呼ばれるものです。
(CLR は実際にはモジュールではなく、アセンブリで動作します)

アセンブリ マニフェストアセンブリ内の一連のファイルを記述するアセンブリの一部です。

ここに画像の説明を入力 アセンブリを使用すると、再利用可能、セキュリティ保護可能、バージョン管理可能なコンポーネントの論理的概念と物理的概念を切り離すことができます。アセンブリのモジュールには、参照されているアセンブリに関する情報 (バージョン番号を含む) も含まれています。この情報により、アセンブリは自己記述型になります。つまり、CLR は、アセンブリ内のコードを実行するために、アセンブリの直接の依存関係を判断できます。
実際に C# コンパイラを使用する場合、.DLL または .EXE の生成はコンパイラ オプションを使用して行われるため、アセンブリの概念では DLL と EXE は同等のコンポーネントです。

したがって
、1-正しい、アセンブリは管理されたDDLまたはEXEファイルです
2-いいえ、アセンブリマニフェストはアセンブリの一部です
3- 回答に記載
4- マネージ .DLL または .EXE = アセンブリ (メタデータ + アセンブリ マニフェスト + MSIL コードを含む)

画像とジェフリー・リヒターからの引用の一部

于 2013-03-20T18:35:26.123 に答える
0

優れた本Pro C# 5 and the .NET 4.5 Framework から:

*.dll または *.exe が .NET 対応コンパイラを使用して作成された場合、バイナリ BLOB はアセンブリと呼ばれ ます。

アセンブリにはMSIL コードが含まれます。これは、絶対に必要になるまでプラットフォーム固有の命令にコンパイルされないという点で、Java バイトコードと概念的に似ています。通常、「絶対に必要」とは、MSIL 命令のブロック (メソッド実装など) が .NET ランタイムで使用するために参照されるポイントです。

アセンブリには、MSIL 命令に加えて、バイナリ内のすべての "型" の特性を鮮明に詳細に記述するメタデータも含まれています。たとえば、SportsCar という名前のクラスがある場合、型メタデータは、SportsCar によって実装されるインターフェイス (存在する場合)、および SportsCar 型によってサポートされる各メンバーの完全な説明など、SportsCar の基本クラスなどの詳細を記述します。.NET メタデータは常にアセンブリ内に存在し、.NET 対応言語コンパイラによって自動的に生成されます。

最後に、MSIL と型メタデータに加えて、アセンブリ自体もメタデータを使用して記述されます。これは正式にはマニフェストと呼ばれます。マニフェストには、アセンブリの現在のバージョンに関する情報、カルチャ情報 (文字列および画像リソースのローカライズに使用)、および適切な実行に必要なすべての外部参照アセンブリのリストが含まれています。

于 2016-04-11T10:38:54.117 に答える