2010-12-13 34 views
8

Tôi cố gắng để biên dịch một (R2010b) ứng dụng Matlab có sử dụng một mô-đun NET, nhưng tôi phải đối mặt với một vấn đề với sự mâu thuẫn giữa MCR và các mô-đun NET:MCR và .NET không tương thích

  • Các Mô-đun .NET được biên dịch với Visual Studio 2010.
  • MCR được định cấu hình để sử dụng Visual Studio 2010.
  • Ứng dụng này cũng chứa một vài tệp Mex được xây dựng với Visual Studio 2010 và chúng hoạt động tốt trong cả Matlab và với MCR.

Nếu tôi tải cụm từ từ khóa Matlab thì mọi thứ hoạt động tốt, nhưng khi tôi biên dịch ứng dụng và chạy nó từ cmd.exe, lỗi sẽ được báo rằng cụm được tạo với thời gian chạy mới hơn hiện đang được tải. Tôi nghĩ rằng Matlab R2010b được xây dựng với Visual Studio 2008 và tin rằng đây là vấn đề, nhưng tôi tự hỏi nếu có ai có một giải pháp cho vấn đề?

+2

Từ http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6-1.html: "Giao diện MATLAB hỗ trợ các tính năng của .NET Framework phiên bản 2.0 và hoạt động với phiên bản 2.0 và các phiên bản tương thích của nó. (Phiên bản 3.0 và 3.5). MATLAB hỗ trợ tải phiên bản Framework 4.0 phiên bản nếu bạn đã cài đặt phiên bản 4.0 trên hệ thống của mình. Tuy nhiên, các tính năng dành riêng cho phiên bản 4.0 chưa được thử nghiệm. " – Mikhail

+0

Nó không phải là về phiên bản VS nhưng đối với khung mục tiêu nào thì các assembly được biên dịch. Với cả VS2008 và VS2010, bạn có thể biên dịch cho tất cả các phiên bản .NET, bao gồm cả phiên bản cũ hơn. Nếu bạn không sử dụng các tính năng .NET 4 cụ thể thì bạn có thể thử biên dịch sang .NET 3.5 – Mikhail

+0

Nhưng công việc lắp ráp chỉ tốt nếu tôi tải nó từ cli, vì vậy tôi không nghĩ rằng vấn đề là các tính năng không tương thích trong .NET 4.0. – trondd

Trả lời

7

Giải pháp là để cung cấp một tập tin ứng dụng cấu hình (foo.exe.config cho ứng dụng gọi là foo.exe) bên cạnh exe biên soạn với các mục sau đây: Giao diện NET

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

MATLAB được xây dựng với .NET framework 2.0, có nghĩa là trong trường hợp không có tệp cấu hình ứng dụng thì 2.0 CLR được tải. Khi chạy trong MATLAB, các mục nhập <supportedRuntime> từ tệp cấu hình cho MATLAB tải 4,0 CLR nếu có.

+1

Rất vui được biết! Có lẽ bạn có thể cung cấp một liên kết đến nguồn gốc của tài liệu này? Tôi cho rằng nó là một phần của khung công tác .NET? – trondd

+1

@trondd Đây là liên kết từ msdn về supportRuntime [link] (http://msdn.microsoft.com/en-us/library/w4atty68.aspx). useLegacyV2RuntimeActivationPolicy đã được thảo luận trong [link] (http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config), điều quan trọng khi sử dụng một assembly chế độ hỗn hợp (C++/CLI) trong .NET 4.0. Tôi cũng quên đề cập rằng MATLAB đã gửi một tập tin cấu hình, MATLAB.exe.config trong $ MATLABROOT \ bin \ $ ARCH đó là lý do tại sao mọi thứ hoạt động trong MATLAB. – Shaf

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