2

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 の両方を読み込めるように、アセンブリ マニフェスト ファイルを編集できる必要があります。

4

1 に答える 1