8

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

4

1 回答 1

7

解决方案是在已编译的 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 中运行时<supportedRuntime>,配置文件中的条目会告诉 MATLAB 加载 4.0 CLR(如果可用)。

于 2011-07-01T17:02:52.357 回答