2011-10-21 118 views
5

我有一個使用VS2008(amd64)構建的dll項目。 DLL的清單說msvcp90.dll依賴於錯誤的msvcr90.dll?

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

當我加載DLL到DependencyWalker它指的winsxs文件目錄

amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251 

如何發生的呢?是不是這整個明顯的東西是爲了避免這樣的情況,通過給每個DLL/EXE的信息與它建立的版本,因此它所依賴的CRT版本?

;第二,更令人困惑的事情是,msvcp90.dll取決於MSVCR90.DLL MSVCR90.DLL將無法找到!?!嘿,它與msvcm90.dll和msvcp90.dll一起在winsxs目錄中! 如果我將正確的msvcr90.dll複製到與我的dll相同的目錄中,它的工作原理! (但是,這不是我們在DllHell時代的情況嗎?並且不應該因爲msvc * .dll-copying應該已經結束,因爲我們有清單???)

如果有人有,我會非常感激對我的解釋!

回答

1

有了清單,的Microsft引進了一種新的「DLL地獄」,以解決「DLL地獄」 :(

順便說一句,你引用的最後一個版本(9.0.30729)的是MSVCR9 CRT升級到SP1 也許你可以試着用這個版本來更新你的VS2008來「同步」這個清單。