5

VS2008 (amd64) でビルドされた dll プロジェクトがあります。dllのマニフェストは言う

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />

dll を DependencyWalker にロードすると、winsxs-directory が参照されます。

amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251

どうすればそれが起こりますか?このマニフェスト全体は、すべての dll/exe にどのバージョンでビルドされているか、したがって依存する CRT バージョンの情報を与えることで、そのような状況を回避するためのものではありませんか?

2 つ目は、msvcp90.dllがmsvcr90.dllに依存しているにもかかわらず、msvcr90.dll が見つからないということです!?! ねえ、それは msvcm90.dll と msvcp90.dll と一緒に同じ winsxs ディレクトリにあります! 私のdllと同じディレクトリに正しいmsvcr90.dllをコピーすると、動作します! (しかし、繰り返しになりますが、これは DllHell 時代の状況ではありませんか? そして、マニフェストがあるので、msvc*.dll のコピーは終了するべきではありませんか???)

誰かが私に説明をしてくれたら、本当に感謝しています!

4

1 に答える 1

1

マニフェストにより、Microsft は「dll 地獄」を解決するために新しい種類の「dll 地獄」を導入しました :(

ちなみに、参照している最後のバージョン (9.0.30729) は、SP1 にアップグレードされた MSVCR9 CRT です。マニフェストを「同期」するために、このバージョンで VS2008 を更新してみてください。

于 2011-12-24T21:36:26.790 に答える