3

アプリケーション マニフェストとアセンブリ マニフェストの違いは何ですか? それぞれどこで使われていますか?2 つのうち、.dll または .exe リソースにあるのはどれですか? (または両方が存在する可能性がありますか?)。

一度に質問が多すぎて申し訳ありませんが、誰かが私にこれを説明できるなら、それは本当に役に立ちます. 私がこれを求めている理由は、PE ファイルに埋め込まれたマニフェストから情報を抽出できるようにしたいからです。これらのマニフェストの説明を見つけましたが、2 つあり、どちらに従うべきかわかりません。

アプリケーション マニフェストの説明
アセンブリ マニフェストの説明

編集: いいえ、API 呼び出しを使用したくありません。すべて自分で書いています。

4

3 に答える 3

3

簡単に言うと、この 2 つは完全に別の概念であり、残念ながら名前が似ています。

アプリケーション マニフェストは、PE バイナリ (マネージドまたはネイティブ) に埋め込まれた、または PE バイナリと共に配布された XML ファイルであり、SxS アセンブリの依存関係、必要な昇格、OS バージョンの互換性などについて OS ローダーに指示を与えます。

アセンブリ マニフェストは、マネージド アセンブリの依存関係、アセンブリを構成するファイル、アセンブリの公開キー、型エクスポート、CLR フラグなどを示す CLI アセンブリのセクションです。ILDASM.exe またはほとんどの .NET 逆コンパイラを使用して、アセンブリのマニフェストを調べることができます。

ECMA 335 (CLI 仕様) のセクション I.9.6 からの関連する抜粋:

マニフェスト: すべてのアセンブリには、アセンブリを構成するファイル、エクスポートされる型、およびアセンブリ内の型参照を解決するために必要な他のアセンブリを宣言するマニフェストがあります。CLI コンポーネントが CLI コンポーネントのメタデータを介して自己記述的であるように、アセンブリもマニフェストを介して自己記述的です。1 つのファイルがアセンブリを構成する場合、そのファイルには、アセンブリで定義された型を記述するメタデータと、アセンブリ自体を記述するメタデータの両方が含まれます。アセンブリにメタデータを含む複数のファイルが含まれている場合、各ファイルにはファイルで定義されている型が記述されており、これらのファイルの 1 つには、アセンブリを記述するメタデータも含まれています (他のファイルの名前、それらの暗号化ハッシュを含む)。 、およびそれらがアセンブリの外部にエクスポートする型)。

ご了承ください:

  • すべてのマネージド アセンブリには、アセンブリ マニフェスト、実行可能ファイル、およびライブラリが必要です。
  • すべてのネイティブ バイナリ、実行可能ファイル、およびライブラリには、アプリケーション マニフェストが含まれる場合があります。
于 2013-11-10T14:53:45.907 に答える
1

アプリケーションマニフェストは通常​​、EXEおよび皮肉なことにDLLに埋め込まれ、EXEまたはDLLが依存するアセンブリを指定します。

アセンブリマニフェストは、DLLに埋め込むことも、別のファイルとしてディスクに配置することもでき、アセンブリにIDとリソースのリスト(dll、アクティベーションフリーのcomオブジェクト、ウィンドウクラス)を与えることができます。

アセンブリの名前がdllの名前である場合、同じマニフェストが、dllの依存関係を判別するためのアプリケーションマニフェストと、アセンブリがエクスポートするものを確認するためのアセンブリマニフェストの両方として使用されることになります。このオプションは、ネイティブアセンブリには本当におかしなようです。通常は、company.product.moduleの行に沿って複雑な名前のアセンブリを作成し、その1つのエントリとして単純なmodule.dllを使用する方が適切です。

于 2011-01-23T20:53:58.717 に答える
1

私は両方に従う必要があるようです:

DLLのリソースとして、アセンブリはDLLのプライベート使用に使用できます。アセンブリマニフェストをリソースとしてEXEに含めることはできません。EXEファイルには、リソースとしてアプリケーションマニフェストが含まれる場合があります。

ここにある情報)。したがって、実行可能ファイルにはリソースに埋め込まれたアプリケーションマニフェストがあり、ライブラリ(DLL)にはアセンブリマニフェストがあるようです。どちらもPE(ポータブル実行可能ファイル)なので、両方のタイプを解析する必要があります。

于 2010-08-19T09:03:00.463 に答える