MCR和.NET不兼容

tro*_*ndd 8 .net matlab matlab-deployment matlab-compiler

我正在尝试编译使用.NET模块的Matlab(R2010b)应用程序,但我遇到了MCR和.NET模块之间不兼容的问题:

  • .NET模块使用Visual Studio 2010编译.
  • MCR配置为使用Visual Studio 2010.
  • 该应用程序还包含一些使用Visual Studio 2010构建的Mex文件,它们在Matlab和MCR中都可以正常工作.

如果我从Matlab cli加载程序集一切正常,但是一旦我编译应用程序并从cmd.exe运行它,就会抛出一个错误,指出程序集是使用比当前加载的运行时更新的运行时构建的.我认为Matlab R2010b是用Visual Studio 2008构建的,并且相信这就是问题,但我想知道是否有人能解决这个问题?

小智 7

解决方案是在编译的exe旁边提供一个应用程序配置文件(名为foo.exe的应用程序的foo.exe.config),其中包含以下条目:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
 </configuration>
Run Code Online (Sandbox Code Playgroud)

MATLAB .NET界面是使用.NET framework 2.0构建的,这意味着在没有应用程序配置文件的情况下会加载2.0 CLR.在MATLAB中运行时,<supportedRuntime>配置文件中的条目告诉MATLAB加载4.0 CLR(如果可用).