2011-10-21 31 views
5

Tôi có một dự án dll được xây dựng với VS2008 (amd64). Manifest của dll nóimsvcp90.dll phụ thuộc vào sai msvcr90.dll?

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

Khi tôi tải dll vào DependencyWalker nó đề cập đến winsxs thư mục

amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251 

Làm thế nào có thể xảy ra? Không phải toàn bộ điều này có nghĩa là để tránh những tình huống như thế bằng cách cho mọi dll/exe thông tin mà phiên bản nó được xây dựng và do đó phiên bản CRT phụ thuộc vào nó?

Và thứ hai, thậm chí điều khó hiểu hơn nữa là các msvcp90.dll phụ thuộc vào MSVCR90.DLL nhưng MSVCR90.DLL không thể tìm thấy!?! Hey, nó nằm trong cùng thư mục winsxs cùng với msvcm90.dll và msvcp90.dll! Nếu tôi sao chép msvcr90.dll đúng trong cùng thư mục với dll của tôi, nó hoạt động! (Nhưng một lần nữa, không phải là tình hình chúng tôi đã có trong DllHell lần? Và không nên rằng msvc * .dll-sao chép nên kết thúc kể từ khi chúng tôi có manifest ???)

Tôi sẽ thực sự biết ơn nếu có ai có một lời giải thích cho tôi!

Trả lời

1

Với manifest, Microsft đã giới thiệu một loại mới của "địa ngục dll" để giải quyết "dll địa ngục" :(

Bằng cách này, phiên bản cuối cùng bạn đang tham chiếu (9.0.30729) là MSVCR9 CRT nâng cấp đến SP1 Có thể bạn có thể thử cập nhật VS2008 của mình bằng phiên bản này để "đồng bộ hóa" bản kê khai.

Các vấn đề liên quan