【问题标题】:MCR and .NET incompatibilityMCR 和 .NET 不兼容
【发布时间】:2011-05-24 15:49:00
【问题描述】:

我正在尝试编译使用 .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 构建的,并认为这是问题所在,但我想知道是否有人解决了这个问题?

【问题讨论】:

  • 来自mathworks.com/help/techdoc/matlab_external/brpb5k6-1.html:“MATLAB 接口支持 .NET Framework 2.0 版的功能,并适用于 2.0 版及其兼容版本(3.0 版和 3.5 版)。MATLAB 支持加载框架 4.0 版如果您的系统上安装了 4.0 版,则程序集。但是,尚未测试特定于 4.0 版的功能。"
  • 这与 VS 版本无关,而是为哪个目标框架编译程序集。使用 VS2008 和 VS2010,您可以编译所有 .NET 版本,包括旧版本。如果您没有使用特定的 .NET 4 功能,那么您可以尝试编译为 .NET 3.5
  • 但是如果我从 cli 加载它,程序集就可以正常工作,所以我认为问题不在于 .NET 4.0 中的不兼容功能。

标签: .net matlab matlab-deployment matlab-compiler


【解决方案1】:

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

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

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

【讨论】:

  • 很高兴知道!您能否提供指向该文档原始来源的链接?我认为它是 .NET 框架的一部分?
  • @trondd 这是来自 msdn 的关于supportedRuntime link 的链接。 useLegacyV2RuntimeActivationPolicy 已在 link 中讨论过,这在 .NET 4.0 中使用混合模式程序集 (C++/CLI) 时很重要。我还忘了提到 MATLAB 已经在 $MATLABROOT\bin\$ARCH 中提供了一个配置文件 MATLAB.exe.config,这就是为什么在 MATLAB 中可以正常工作的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2014-09-24
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 2018-11-19
相关资源
最近更新 更多