Visual Studio 9 を使用して、過去にビルドされたビルド前の Dll モジュールで構成されるプロジェクトがあります。
プロジェクトの EXE は現在、Visual Studio 9 の SP1 を使用してビルドされています。
EXE を展開するときに管理アクセスを要求したくないため、C ランタイムはアプリケーションのルートにバンドルされています。Dll: MSVCRT90.DLL とそのマニフェスト: Microsoft.VC90.CRT.manifest
現在、ランタイム マニフェストの EXE と最新バージョンはすべて一致しています。アプリケーション マニフェストは msvcrt.dll の 9.0.30729.1 を要求しており、crt マニフェストには msvcrt90.dll がバージョン 9.0.30729.1 であることを確認するエントリが含まれています。
さて、問題です。私たちのアプリケーションで使用されているサード パーティの DLL ライブラリは、元の msvcrt90.dll バージョン 9.0.21022.8 に対してリンクされており、この効果に対する内部マニフェストを持っています。
VS9 CRuntime の両方のバージョンがインストールされている開発用 PC で、アプリは動作します。アプリを初めてインストールする「新しい」PC では、DLL のロードに失敗します。
今、私にできるチートがいくつかあります。1 つは、アプリを 9.0.2 に戻すことです。元のソース メディアから 9.0.2 DLL を取得します。9.0.3 が望ましいため、これは望ましくありません。または、サードパーティのライブラリを再構築するために一生懸命努力しています。
さらに、私たちの開発用 PC では、サード パーティのライブラリが古い dll を要求すると、新しい dll にリダイレクトされることを確信しています。それらはバイナリ互換です。
アプリケーション マニフェストとアセンブリは、この種のごみから私たち全員を救うことを目的としていました。exe と dll の両方を読み込めるように、アセンブリ マニフェスト ファイルを編集できる必要があります。