VC80.CRT バージョン 8.0.50727.762 に対してビルドおよびテストされた VC++ マネージド アプリがあります。埋め込まれたマニフェストが 762 を指していることを確認し、ビルド マシンには最新の VC80.CRT バージョンとして 762 が含まれています。
アプリは、762 とそれ以降のバージョンのランタイム (4053) の両方を備えたマシンでも実行されています。
ちなみに、どちらのマシンも XP Pro SP2 です。2 台目のマシン (いわば 4053) には .NET 3.0 が搭載されています。
アプリは 4053 マシンで動作します。SxS の下の VC80.CRT に付随するパブリッシャー ポリシーにより、アプリはアプリケーションに対して 762 ではなく 4053 をロードすることを理解していると思います。
入りたくないさまざまな理由から、762 バージョンを使用するよう強制しようとしてきましたが、これまでのところ成功していません。
いずれにせよ、文献を調べた結果、ロードするターゲット バージョンを決定するチェーン (アプリ構成 -> 発行者ポリシー -> マシン構成) を理解していると思います。
そこで、myapp.exe.config ファイル (以下を参照) を myapp.exe の近くに配置することにしました。チェーンの 2 番目のステップを回避するために、publisherPolicy を「no」に設定することに注意してください。
アプリはまだ 762 ではなく 4053 をロードします。おそらく、マシン構成ファイルの内容が原因ですが、そのファイルの内容が何を意味するのかを理解することさえできません。確かに VC80 への参照はありません。 .CRT またはそこにある msvc[x]80.dll ライブラリのいずれか。
アセンブリの古いバージョンを参照することは比較的簡単で、「dll 地獄」を克服するための鍵になると予想していました。アセンブリの発行者が下位互換性を (発行者のポリシーを介して) 保証したいと思っていたとしてもです。
誰でも光を当てることができますか?ありがとう
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
<publisherPolicy apply="no" />
<bindingRedirect oldVersion="*" newVersion="8.0.50727.762"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>