2010-06-07 32 views
9

Tôi có một dll C++/cli mà tôi tải khi chạy và hoạt động tốt ở chế độ gỡ lỗi. Nếu tôi cố gắng và tải dll trong chế độ phát hành nó không tải nói rằng một hoặc nhiều phụ thuộc bị thiếu. Nếu tôi chạy phụ thuộc vào nó tôi thiếu MSVCR90.DLL từ MSVCM90.DLL. Nếu tôi kiểm tra phiên bản gỡ lỗi của dll nó cũng có sự thiếu phụ thuộc, nhưng chống lại phiên bản gỡ rối (D).C++/CLI Thiếu MSVCR90.DLL

Tôi đã đảm bảo gỡ lỗi/phát hành nhúng tệp kê khai. Tôi đọc một cái gì đó về có vấn đề với các ứng dụng tải dll được xây dựng như bất kỳ CPU và dll được xây dựng như x86, nhưng tôi không thấy làm thế nào để thiết lập cả hai để x86.

Tôi đang sử dụng VS2010.

Dù sao, tôi đã rối tung một lúc và không biết có gì sai. Tôi chắc rằng ai đó ở đó biết chuyện gì đang diễn ra. Hãy cho tôi biết nếu tôi cần bao gồm thông tin bổ sung.

alt text http://www.freeimagehosting.net/uploads/fb31c0e256.png

UPDATE:

này kết thúc là giải pháp cho vấn đề của tôi: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827

+0

Có thể thuộc tính dự án của bạn được đặt không chính xác, chỉ cần đặt như sau: C++/Code Generation/Thư viện thời gian chạy // MdD – ashiontang

Trả lời

10

MSVCR90 là thời gian chạy cho Visual Studio 2008 . Nếu bạn đang chạy ứng dụng trên PC phát triển của mình, thì bạn nên cài đặt và gỡ bỏ các runtimes (như là một phần của Visual Studio) nhưng có thể đã xảy ra lỗi khi cài đặt, hoặc VS2010 không thực sự bao gồm runtimes. Nếu bạn đang cố gắng chạy Bản phát hành trên một máy tính khác, thì nó chỉ cần cài đặt thời gian chạy.

Dù bằng cách nào, bạn có thể sửa lỗi bằng cách cài đặt Visual Studio 2008 redistributable - nhưng đảm bảo bạn tải xuống đúng cho PC (x86 hoặc x64).

Trong các phiên bản trước của VS, bạn cần thời gian chạy cho phiên bản bạn đang biên dịch, vì vậy nếu VS2010 tuân theo tiền lệ này, bạn cần MSVCR100, không phải MSVCR90 - điều này cho thấy bạn có thể chưa biên dịch lại tệp với VS2010 - làm như vậy có thể là một cách tiếp cận khác để chạy nó trên máy tính của bạn (sử dụng redist trong cài đặt VS2010 của bạn) nhưng hãy cẩn thận rằng bạn vẫn cần những người dùng khác để cài đặt (VS2010) thích hợp redistributable trên PC của họ.

Đối với "CPU bất kỳ" so với "x86", đây chỉ là sự cố trên máy tính 64 bit. Trên các hệ thống đó, một ứng dụng 64 bit không thể liên kết động tới các dll 32 bit. Nếu bạn biên dịch ứng dụng của mình thành "Bất kỳ CPU" nào thì JIT sẽ được biên dịch thành 64 bit trên hệ điều hành 64 bit, do đó sẽ bị lỗi nếu nó cố gắng gọi bất kỳ dll 32 bit nào trực tiếp. Giải pháp thứ nhất là xây dựng ứng dụng nhắm mục tiêu "x86", điều đó buộc trình biên dịch JIT tạo mã 32 bit (ngay cả trên máy 64 bit) và do đó đảm bảo khả năng tương thích với dll bạn muốn gọi. Nếu DLL là một hội đồng quản lý, sau đó bạn có thể sử dụng bất kỳ CPU trên cả hai ứng dụng một dll như cả hai sẽ được JITted để cùng một định dạng.

+0

Đây là hộp dev của tôi và tôi đang nhắm mục tiêu .net 3.5 với VS2010 kết thúc bằng cách sử dụng VS2008 để xây dựng.Tôi không chắc liệu đó có phải là một sự kỳ quặc xảy ra ở đó hay không. Vì vậy, nó là chính xác mà nó sử dụng 90 phiên bản của dlls. –

+0

Đây là câu trả lời cho câu hỏi của tôi, nhưng không giải quyết được vấn đề của tôi. Tôi vẫn không biết những gì là sai với môi trường dev của tôi, nhưng tôi không thể tải những dlls trong chế độ phát hành. Chúng hoạt động tốt trên các máy khác có cài đặt CRT thời gian chạy vC++. –

+0

@Mitch. Rất tiếc khi biết điều đó. Tất cả những gì tôi có thể đề nghị là thử cài đặt gói redist trên PC của bạn (các dll được bao gồm trong Visual Studio cài đặt, nhưng nó không thực sự cài đặt gói redist, vì vậy nó hơi khác so với PC của người dùng) - nếu điều đó không hoạt động, điều duy nhất tôi có thể nghĩ đến là cài đặt lại Visual Studio. Nó không có vẻ giống như một vấn đề với xây dựng của bạn, bởi vì bạn nói nó chạy tốt trên máy tính khác - vì vậy nó chắc chắn là một cái gì đó về máy tính của bạn là khác nhau. –

1

Nó xảy ra với tôi một cái gì đó tương tự chạy một trang web trong Vistual Studio 2012, sau khi di chuyển từ Visual Studio 2010. Thông báo lỗi đã nói rằng MSVCR90.DLL bị thiếu. Giải pháp là: 1) Xóa thư mục _bindeployable được đặt tại đường dẫn dự án. 2) Xây dựng lại.

Tôi hy vọng điều đó sẽ hữu ích.

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