0

编辑(2013 年 6 月 24 日):

我想我可能已经部分找到了问题的根本原因。

我不只是在测试机器上运行 .exe,而是运行和编译 Matlab 源代码。当 Matlab 尝试添加第 3 方程序集时,弹出一个错误,即“无法加载一个或多个请求的类型 etc2”。经过进一步调查,我发现第 3 方 dll 依赖于另一个 dll 即 NationalInstruments.Common,version=8.1.0.415,Culture=neutral,PublicKeyToken=4544464cdeaab541。我在测试机器上检查了 GAC,它有 NationalInstruments.Common 版本 8.9.35.302。有趣的是,我的开发机器也有相同版本的 NI .Common dll,但我很困惑为什么 .exe 可以在我的机器上运行,但不能在测试机器上运行。

我用谷歌搜索了这个,有人建议做程序集绑定重定向。但该示例是针对使用 C# 在 Visual Studio 中进行开发的。我想知道有没有办法直接在 Matlab 中做同样的事情?

结束编辑

我正在开发一个简单的 Matlab 应用程序/GUI,只需按一下按钮,即可从外部硬件获取数据并绘制它们。供应商提供 API 以 .net dll 程序集的形式访问此硬件。因此,在 Matlab 中,我使用 NET.addAssembly 添加了程序集。但是,我必须给出它的完整路径,因为它是一个私有程序集。当我将代码编译成 .exe 时,它​​在我的机器上运行良好。但是,当我将它转移到另一台机器上时,它并没有运行。仅供参考,具有正确版本的 Matlab 的 MCR 安装在另一台机器上,因此问题不是由于缺少 MCR。

我认为问题在于当我在 NET.addAssembly 中引用 dll 时,我使用完整路径在我的机器上找到了 dll。所以,在另一台机器上,它找不到它。所以我尝试将dll放在另一台机器上的同一个文件夹中,但它无法运行。我也尝试在编译 .exe 时打包 dll,但效果不佳。

有人可以建议我下一步该怎么做吗?谢谢!

4

0 回答 0