2010-12-13 4 views
8

Я пытаюсь скомпилировать приложение Matlab (R2010b), который использует модуль .NET, но я столкнулся с проблемой с несовместимостью между MCR и модулем .NET:MCR и .NET Несовместимость

  • .NET модуль скомпилирован с Visual Studio 2010.
  • MCR настроен на использование Visual Studio 2010.
  • Приложение также содержит несколько файлов Mex, которые построены с помощью Visual Studio 2010, и они отлично работают как в Matlab, так и в с MCR.

Если я загрузить сборку из Matlab Cli все работы просто отлично, но когда я скомпилировать приложение и запустить его из cmd.exe выдается ошибка о том, что сборка построена с выполнением, который новее тот, который в настоящее время загружен. Я думаю, что Matlab R2010b построен с Visual Studio 2008 и считает, что это проблема, но мне интересно, есть ли у кого-нибудь решение проблемы?

+2

От http://www.mathworks.com/help/techdoc/matlab_external/brpb5k6-1.html: «Интерфейс MATLAB поддерживает функции .NET Framework версии 2.0 и работает с версией 2.0 и совместимыми версиями (Версии 3.0 и 3.5). MATLAB поддерживает загрузку сборок Framework версии 4.0, если в вашей системе установлена ​​версия 4.0. Однако функции версии 4.0 не были протестированы ». – Mikhail

+0

Речь идет не о версии VS, а о том, для какой целевой структуры собираются сборки. С VS2008 и VS2010 вы можете скомпилировать для всех версий .NET, включительно более старую. Если вы не используете определенные функции .NET 4, вы можете попробовать скомпилировать .NET .NET – Mikhail

+0

Но сборка работает нормально, если я загружаю ее из cli, поэтому я не думаю, что проблема - это несовместимые функции в .NET 4.0. – trondd

ответ

7

Решение состоит в создании файла приложение конфигурации (foo.exe.config для приложения под названием foo.exe) рядом с компилируемым с помощью следующей записи: интерфейс .NET

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

MATLAB построен с .NET framework 2.0, что означает, что при отсутствии файла конфигурации приложения загружается 2.0 CLR. При запуске в MATLAB записи <supportedRuntime> из файла конфигурации сообщают MATLAB загружать 4.0 CLR, если они доступны.

+1

Приятно знать! Не могли бы вы предоставить ссылку на исходный источник этой документации? Я предполагаю, что это часть платформы .NET? – trondd

+1

@trondd Вот ссылка из msdn about supportedRuntime [ссылка] (http://msdn.microsoft.com/en-us/library/w4atty68.aspx). useLegacyV2RuntimeActivationPolicy обсуждается в [link] (http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config), что важно при использовании сборки смешанного режима (C++/CLI) в .NET 4.0. Я также забыл упомянуть, что MATLAB уже отправляет файл конфигурации MATLAB.exe.config в $ MATLABROOT \ bin \ $ ARCH, поэтому все работает в MATLAB. – Shaf

Смежные вопросы