Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MCR和.NET不兼容_.net_Matlab_Matlab Deployment_Matlab Compiler - Fatal编程技术网

MCR和.NET不兼容

MCR和.NET不兼容,.net,matlab,matlab-deployment,matlab-compiler,.net,Matlab,Matlab Deployment,Matlab Compiler,我正试图编译一个使用.NET模块的Matlab(R2010b)应用程序,但我面临着MCR和.NET模块之间不兼容的问题: NET模块是使用Visual Studio 2010编译的 MCR配置为使用Visual Studio 2010 该应用程序还包含一些使用VisualStudio2010构建的Mex文件,它们在Matlab和MCR中都可以正常工作 如果我从Matlab cli加载程序集,一切正常,但是一旦我编译应用程序并从cmd.exe运行它,就会抛出一个错误,指出程序集是使用比当前加载

我正试图编译一个使用.NET模块的Matlab(R2010b)应用程序,但我面临着MCR和.NET模块之间不兼容的问题:

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

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

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

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


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

From:“MATLAB接口支持.NET Framework 2.0版的功能,并与2.0版及其兼容版本(3.0版和3.5版)一起使用。如果系统上安装了4.0版,MATLAB支持加载Framework 4.0版程序集。但是,尚未测试4.0版的特定功能。”它不是关于VS版本,而是针对哪个目标框架编译程序集。使用VS2008和VS2010,您可以编译所有.NET版本,包括旧版本。如果您没有使用特定的.NET 4功能,那么您可以尝试编译到.NET 3.5,但是如果我从cli加载程序集,程序集工作正常,因此我认为问题不在于.NET 4.0中的功能不兼容。很高兴知道!您是否可以提供一个指向此文档原始来源的链接?我假设它是.NET framework的一部分?@trondd这里是来自msdn的关于supportedRuntime的链接。useLegacyV2RuntimeActivationPolicy在.NET 4.0中使用混合模式程序集(C++/CLI)时非常重要。我还忘了提到MATLAB已经在$MATLABROOT\bin\$ARCH中提供了一个配置文件MATLAB.exe.config,这就是为什么MATLAB可以工作的原因。