2013-06-02 44 views
5

Tôi có dự án C++/CLI được tạo trong VS2005. Tôi hy vọng sẽ chạy điều này trong VS2010 (hoặc 2012) vì đó là IDE chính của tôi Tôi cần phải sửa đổi một số điều trong dự án C++/CLI cũng như kích thích của nó để chuyển đổi qua lại tới vs2005 để biên dịch lại , sao chép vv Lý do quan trọng khác là các dự án của tôi đang chạy trong VS2010/2012 là trong .NET4 vì vậy không có tùy chọn để di chuyển mọi thứ vào VS2005. dự ánchạy dự án vs2005 C++ trong phiên bản sau của studio trực quan

có phụ thuộc vào thư viện của bên thứ ba không được quản lý mà bản thân chúng có phụ thuộc vào các phiên bản debug của C++ Redistributable thư viện (msvcr80.dll, msvcm80.dll, msvcp80.dll)

Khi tôi lần đầu tiên chạy dự án nâng cấp tôi nhận được 'module quy định không thể tìm được' -

Đó là lúc tôi nhận thấy dự án cli đang được biên dịch chống lại các phiên bản sau này của msvc (MSVCR90.DLL)

lắp ráp cli phụ thuộc theo phụ thuộc; vs2005 trên trái vs 2008 về ngay

enter image description here

Có cách nào để thực hiện một phiên bản mới hơn của VS biên dịch sử dụng năm 2005 thư viện?

cập nhật nó không quan trọng đối với nó (và có thể không được) nhưng có thể chạy và gỡ lỗi cả hai cạnh nhau? Khi tôi cố gắng chạy dự án biên soạn tôi nhận được thông báo lỗi này:

enter image description here

tôi đã cố gắng sao chép các file manifest từ dự án vs2005 cho dự án VS2010 nhưng điều này không làm việc (thông báo lỗi tương tự) . Tôi cũng vô hiệu hóa tệp kê khai được nhúng và thay thế tệp .manifest được tạo bằng một tệp từ vs2005 và điều này không hoạt động.

Update2 Tôi đã có quá khứ lỗi này bằng cách xác định các thư viện msvcr trong biểu hiện:

<dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
tuy nhiên

bây giờ khi tôi chạy ứng dụng của tôi một trong những thư viện của bên thứ ba ném một AccessViolationException - Attempted to read or write protected memory khi tôi cố gắng sử dụng một trong các phương pháp. Mã này nếu không hoạt động tốt trong vs2005.

+0

downvoter xin giải thích? – wal

+0

Nói chung, đây không phải là vấn đề khi các phần khác nhau của ứng dụng phụ thuộc vào VC 2005 và 2008. Cả hai thư viện thời gian chạy nên được cài đặt để chạy chương trình như vậy. –

+0

và để chạy trong ngữ cảnh của studio trực quan, tức là gỡ lỗi? – wal

Trả lời

4

Kể từ đó, tôi đã phát hiện ra Daffodil for Visual Studio thực hiện chính xác những gì tôi cần, cụ thể là biên dịch với vc80 trong studio trực quan 2010.Sau khi cài đặt menu thả xuống Platform Toolset có thêm một vài tùy chọn:

nb, bạn vẫn cần phải cài đặt phiên bản Visual Studio thích hợp, ví dụ: nếu bạn nhắm mục tiêu vc80 bạn cần vs2005. NB2, Intellisense is broken trong VS2010 cho cli/C++ mà là một thất vọng lớn sau khi khoảng thời gian nghiên cứu nhận được dự án để làm việc trên VS2010

enter image description here

+0

+1 phát hiện thú vị! –

0

Bạn đã cân nhắc tạo một tệp kê khai cho ứng dụng chưa? Ý tôi là, thông báo lỗi nói rằng vấn đề là tệp kê khai thiếu, vì vậy có lẽ nó sẽ đủ để tạo một tệp kê khai (thông qua cài đặt dự án) hoặc thêm một bàn tay được viết?

Xem: Problem loading RT without Manifest

0

Từ http://www.davidlenihan.com/2007/07/winsxs.html

"Vì vậy, làm thế nào để một ứng dụng biết những gì phiên bản của một DLL nó cần phải nạp Đó là nơi mà một? 'Manifest' đến chơi Một biểu hiện là một XML. tập tin chứa thông tin được sử dụng để tạo thư mục trong C: \ Windows \ winsxs để có thể tải một DLL cụ thể. "

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