在 Windows .NET Framework 环境调用 MATLAB 编译生成的算法包 DLL 时,需要拥有与 MATLAB 环境相匹配的 MCR 环境。但在正常的开发中,依然会遇到各式各样的问题,本文提供了一些常见问题的解决方案。

1. MWArray 初始化异常

TypeInitializationException: “MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常。

如果在运行时产生该异常,请检查本机安装的MCR是与应用应用的 MWArray.dll 相否匹配。

2. MCR 初始化异常

An Error has occurred while trying to initialize the MCR.

该异常的产生有可能是因为 MCR 在处理 DLL 时产生的临时文件导致的,可以尝试清理 %USERPROFILE%\AppData\Local\Temp\%USERNAME% 目录下对应版本的 MCR 临时文件。
说个有意思的事,在这个目录中也含有原始的 .m 算法文件——不过是经过加密的。

3. 试图加载格式不正确的程序

BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

该异常产生的原因应该是引用了错误版本的 MWArray 库,通常见于同时安装了多个版本的 MCR 导致的。
可以先移除解决方案中的 MWArray 的引用,然后使用 Visual Studio 的智能提示来在代码中进行引用,这样会智能引用正确的版本;或者自行选择正确版本的 MWArray.dll 进行引用。