Visual Studio でのマニフェスト生成
特定のプロジェクトのマニフェスト ファイルの生成は、プロジェクトの [プロパティ ページ] ダイアログで制御できます。[構成プロパティ] タブの [リンカー] をクリックし、[マニフェスト ファイル] をクリックします。次に、[マニフェストの生成] をクリックします。新しいプロジェクトのプロジェクト プロパティは、既定でマニフェスト ファイルを生成するように設定されます。ただし、プロジェクトのマニフェストの生成プロパティを使用して、プロジェクトのマニフェストの生成を無効にできます。このプロパティを [はい] に設定すると、このプロジェクトのマニフェストが生成されます。それ以外の場合、リンカーは、アプリケーション コードの依存関係を解決するときにアセンブリ情報を無視し、マニフェストを生成しません。
Visual Studio のビルド システムでは、マニフェストを最終的なバイナリ アプリケーション ファイルに埋め込むか、外部ファイルとして生成できます。この動作は、[プロジェクトのプロパティ] ダイアログの [埋め込みマニフェスト] オプションで制御されます。このプロパティを設定するには、[マニフェスト ツール] ノードを開き、[入力と出力] を選択します。マニフェストは、埋め込まれない場合は外部ファイルとして生成され、最終的なバイナリと同じディレクトリに保存されます。マニフェストが埋め込まれる場合、Visual Studio は、次のプロセスで最終的なマニフェストを埋め込みます。
ソース コードがオブジェクト ファイルにコンパイルされた後、リンカーが依存アセンブリ情報を収集します。最終的なバイナリをリンクするときに、後で最終的なマニフェストを生成する際に使用される中間マニフェストが生成されます。
中間マニフェストの作成とリンクが終了した後、マニフェスト ツールが実行され、最終的なマニフェストがマージされて外部ファイルとして保存されます。
プロジェクト ビルド システムは、次に、マニフェスト ツールによって生成されたマニフェストが、バイナリに既に埋め込まれているマニフェストと異なる情報を含んでいるかどうかを検出します。
バイナリに埋め込まれているマニフェストがマニフェスト ツールによって生成されたマニフェストと異なる場合、またはバイナリに埋め込みマニフェストがない場合、Visual Studio は、もう一度リンカーを呼び出し、外部マニフェスト ファイルをバイナリ内にリソースとして埋め込みます。
バイナリに埋め込まれているマニフェストが、マニフェスト ツールで生成されたマニフェストと同じ場合、ビルドは次のビルド手順に進みます。
マニフェストは、最終的なバイナリ内にテキスト リソースとして埋め込まれます。これを表示するには、最終的なバイナリを Visual Studio でファイルとして開きます。マニフェストが確実に正しいライブラリをポイントするようにするには、「Visual C++ アプリケーションの依存関係の理解」で説明されている手順に従うか、「C/C++ 分離アプリケーションおよび side-by-side アセンブリのトラブルシューティング」セクションの推奨事項に従います。