2012-02-02 38 views
9

Tôi gặp vấn đề với một số VC++ DLL, mà tôi nên đưa vào dự án .NET/C# của mình. Một VC++ DLL là một DLL C++/CLI, mà tôi sử dụng như giao diện công cộng từ dự án .NET của tôi. Các DLL khác được viết bằng native C++. Tôi không có quyền truy cập vào nguồn của VC++ DLL, tôi chỉ cần sử dụng chúng.WinSxS không tải được VC++ DLL

Tôi đã thực hiện dự án thử nghiệm .NET và tham chiếu DLL C++/CLI. Không có vấn đề, trình biên dịch là may mắn, tuyệt vời. Chỉ có một vấn đề: khi tôi bắt đầu chương trình EXE của .NET, tôi gặp lỗi về DLL C++ vì thiếu các DLL lõi VC++. sxstrace cho thấy sau (rút ngắn):

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
... 
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195". 

Bây giờ tôi không có kẻ ngốc và cố gắng một vài điều. Tôi đã đọc nhiều về WinSxS để hiểu sâu hơn về những gì đang diễn ra. Bây giờ tôi đang ở thời điểm đó, nơi nó nhận được sự khâm phục đối với tôi. Hệ thống mà tôi muốn thực hiện chương trình có gói VC++ Redistributable trong phiên bản 8.0.50727.762 (SP1) hiện tại đã được cài đặt. Tôi biết rằng có một tập tin chính sách cho Microsoft.VC80.CRT trong winsxs chuyển hướng tất cả các phiên bản của hội đồng này đến phiên bản hiện tại 8.0.50727.762 (đó là giải pháp cho vấn đề tại http://blogs.msdn.com/b/nikolad/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx). Nhưng khi lỗi ở trên cho biết, tệp chính sách này dường như không hoạt động hoặc không được tính đến. Hệ thống chỉ muốn tìm phiên bản 8.0.50727.6195 của hội đồng.

Bây giờ, đó là câu hỏi đầu tiên: vấn đề ở đây là gì? Sau khi tôi đã tìm ra điều này, tôi có thể giải quyết vấn đề ban đầu ...

+0

Phiên bản không phù hợp là tinh thể rõ ràng trong thông điệp. Nó muốn 8.0.50727.6195, bạn đã có 8.0.50727.762. Truy cập search.microsoft.com và đặt "8.0.50727.6195" vào hộp tìm kiếm. –

+0

Câu hỏi đặt ra là liệu có thể "thuyết phục" ứng dụng chấp nhận 762 thay vì 6195. – Dialecticus

+0

Tôi không chắc chắn về phiên bản của Microsoft trong trường hợp này. Tôi không tìm thấy một gói Redist 2005 Redist với phiên bản 8.0.50727.6195 tại Microsoft Download, gói VC + 2005 Redist hiện tại có trong phiên bản 8.0.50727.762. Nếu 762 là phiên bản cao hơn 6195, nó phải như tôi đã viết: tập tin chính sách WinSxS nên chuyển hướng 6195 đến 762 - nhưng nó không. – Matthias

Trả lời

8

Ok, giờ nó hoạt động - cảm ơn sự giúp đỡ của bạn.

tôi đã tìm ra hai vấn đề đó phải được giải quyết:

1) Tôi đã phải cài đặt "Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update", trong đó triển khai phiên bản 8.0.50727.6195 của VC++ hội đồng. Bản cập nhật này rất khó tìm thấy tại các máy chủ của Microsoft, vì vậy đây là liên kết: http://www.microsoft.com/download/en/details.aspx?id=26347 Thông thường bạn chỉ tìm thấy phiên bản 8.0.50727.762 ("Gói dịch vụ Visual C++ 2005 Gói 1 Redistributable), đã lỗi thời. Kể từ khi DLL C++ được biên dịch 6195, cài đặt bản cập nhật đã giải quyết được vấn đề đầu tiên

2) Trong khi DLL C++/CLI được biên dịch trong chế độ Phát hành, DLL C++ gốc bên dưới đã được gửi trong chế độ Gỡ lỗi. Các tệp DLL và Các gói Redist VC++ không bao gồm các tệp DLL VC++ Debug. http://msdn.microsoft.com/en-us/library/aa985618.aspx nói:

Các phiên bản gỡ lỗi của một ứng dụng không được phân phối lại và không có phiên bản gỡ lỗi nào của các thư viện liên kết động Visual C++ khác nhau (DLL) có thể phân phối lại được.

Giải pháp: các nhà phát triển của quê hương C++ DLL đã cho tôi một phiên bản phát hành và tất cả mọi thứ hoạt động tốt ...

+0

Lưu ý cho các thế hệ tương lai: Bước 1) đã giải quyết "Ứng dụng của tôi không thành công để bắt đầu vì cấu hình song song của nó không chính xác" lỗi không liên quan đến câu hỏi ban đầu. Cũng có thể làm việc cho người khác, khi các đề xuất khác thất bại. – shinjin

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