【发布时间】:2020-12-08 16:39:00
【问题描述】:
我继承了一个几乎没有文档的项目。基本上它是一个 Unity 项目,它接收来自正在运行的 Linux 程序的模拟心率信息,以进行显示。
我获得了在平板电脑上运行的 Unity 应用程序的工作版本。但是当我从存储库中打开项目并尝试运行它时,我得到了一个 DllNotFoundException。我仍在试图弄清楚整个项目是如何设置的,但据我了解,该 DLL 是为了将 C++ 转换为 C# 以供 Unity 使用,因此源文件夹也包含一个 C# 接口类作为 .cpp 和 .h 文件。
这个 DLL 是项目中的几个之一,但它是唯一一个引发错误的。起初我认为这可能是一个糟糕的 DLL,所以我按照我必须生成的几个指令来生成新的,而那些生成的 dll 也不起作用。以前的 Dev 使用 CMake 为工作版本创建 dll。我尝试使用 cMake 和 Visual Studio 来生成 dll,但仍然得到相同的异常。
然后我认为它可能与用于生成 C# 接口的 .net Framework 版本有关,但是之前的 dev 包含的调试调用显示 C# 接口(称为 Iface)已加载。我还使用 .Net framework 3.5 通过 Visual Studio (community 2019) 重新生成了 dll,但我仍然得到相同的结果:DLLNotFoundException
我还尝试更改 Unity 构建设置以针对之前开发人员所说的不同平台,PC、Android 和通用 Windows。无论针对哪个平台,我都会得到相同的 DLLNotFoundException。
我不确定这是否相关,但我发现如果我在 Unity 中的“插件加载设置”下检查“启动时加载”,我会收到错误“插件无法加载......因为一个或更多依赖项无法加载。”我一直试图弄清楚哪些依赖项没有被加载。
我在前一个开发人员指示的文件夹中有插件,在 Assets>HeartRateEngine>Plugins 中,然后该插件文件夹具有 Native 和 Managed 文件夹,引发异常的文件夹位于 Native 文件夹中。我认为 DLL 的位置可能是问题的一部分?
我将尝试重新克隆整个项目,并再次重新生成所有 dll,但我希望得到任何帮助。如有必要,我可以使用代码进行更新,但我目前认为代码不是问题,因为以前的开发人员能够让它工作,而且我可以访问历史记录。如果我有任何进展,我会尽快更新。如果这是一个写得不好的问题,我很抱歉,我只是变得绝望。非常感谢您阅读这一切! :)
【问题讨论】:
-
"插件无法加载...因为它的一个或多个依赖项无法加载。"可能意味着 Unity 正在查找您添加的 dll,但缺少该 dll 想要的其他内容。 (见stackoverflow.com/a/7378982/342842)
-
谢谢!我觉得这是问题所在,但我没有其他文档。我怎样才能进一步调试它以确定究竟缺少什么?
-
我刚刚阅读了链接 - 我有一些事情要尝试,然后我会更新。谢谢身临其境!
-
@NCarlson - 有更新吗?
-
@Chuck 不幸的是,这个项目的截止日期很短,所以我现在选择基本上废弃 dll 并完全编写自己的解决方法。将来我想尝试使用具有不同版本依赖项的不同 PC 重建 dll,看看我是否能让 Unity 识别它。