Unity找不到其他DLL的DLL依赖关系(都在Assets文件夹中)

时间:2018-06-21 15:09:23

标签: c# unity3d dll dependencies

背景信息(可能相关):

  • 在Unity 2017.2中使用“脚本运行时版本”设置为“实验(等效于.NET 4.6)”
  • 在Visual Studio 2017中编写代码(不是MonoDevelop)

我有一个Unity项目,该项目直接使用了第三方DLL(“库A”),我已将其添加到项目的Assets文件夹中。库A依赖于另一个DLL,即“库B”,我也已将其添加到Assets文件夹中。 Unity项目中的任何脚本均不使用库B。库A和库B都是用C#和目标.NET 4编写的,即它们都是托管代码。

一旦添加到Assets文件夹,则在Visual Studio中打开项目,并且两个库的“复制本地”都设置为“真”时,库A和库B都列在“引用”下(尽管我不知道是否Unity使用该属性。

但是,在Unity编辑器中运行项目时,对库A的各种调用都会引发异常,表明库B不可用。使它正常工作的唯一方法是将库B的副本放置在C:\Program Files\Unity\Editor(包含Unity.exe的目录,Unity编辑器可执行文件的目录)中。

我在其他非Unity项目中使用了库A和B,从没有任何问题(只要被引用,Visual Studio会将它们都复制到输出目录中)。我是否缺少必要的Unity特定步骤来告知需要库B?

2 个答案:

答案 0 :(得分:0)

我只是想分享我是如何完成这项工作的。顺便说一下,我使用的是 Unity 2019.2.10f1。

我的项目中有许多我自己和第三方管理的 dll 文件,我将它们全部复制到 ProjectFolder\Assets\Resources\

而且我从来没有遇到过调用任何库或那些库相互调用的问题。

也许问题在于,由于您的第二个库(库 B)没有被任何脚本引用,Unity 没有将其捆绑并使其在调试/运行时可用。

根据我的经验,我发现如果您希望在构建中保留某些内容(任何可能在运行时动态使用的未引用资产),请将其粘贴到 Assets 的 Resources 子文件夹中.

第二种选择可能是构造对第二个“库 B”的一些虚拟调用(它什么都不做,可能是构造和转储),以便 Unity 认为它是必要的并将其包含在您的构建中。

不确定这是否有帮助,但祝你好运!

答案 1 :(得分:0)

Unity 实际上在 Assets 文件夹下有一个名为“Plugins”的特殊文件夹,您可以使用它。这将允许您添加对在 Unity 之外创建的 dll 的引用并链接到它们。您甚至可以按目标对它们进行排序!

  • 资产/插件/x86
  • 资产/插件/Android
  • ...

接受的插件包括以下所有扩展名:.dll、.winmd、.so、.jar、.aar、.xex、.def、.suprx、.prx、.sprx、.rpl、.cpp、.cc 、.c、.h、.jslib、.jspre、.bc、.a、.m、.mm、.swift、.xib、.dylib、.framework、.bundle、.plugin

Unity 2020.3 Plugins Documentation