【问题标题】:Installing a C# library in Visual Studio and using it on unity在 Visual Studio 中安装 C# 库并在 unity 上使用它
【发布时间】:2021-12-08 09:44:27
【问题描述】:

我对这个话题有点陌生,所以我正在寻求帮助。我需要为一个需要检查电话号码的统一项目安装这个库 (https://github.com/twcclegg/libphonenumber-csharp)。 但由于我总是以统一的方式制作简单的游戏,所以我真的不知道该怎么做,也不知道要搜索什么来找到答案。

如果你们中的任何人知道怎么做,那真的会让我很开心。 谢谢

【问题讨论】:

  • unity 手册提供了有关如何使用 DLL 的信息docs.unity3d.com/Manual/UsingDLL.html
  • 谢谢,我会看看这个,但我主要担心的是在我想使用的lib中我不知道dll文件在哪里,我找到了一些dll但很奇怪似乎不是我想要的名字。
  • 从git里看readme,好像得自己搭建
  • 是的,这就是我被卡住的地方,我已经安装了他说是必要的两个 .Net 包,但我不知道在哪里输入命令:xcopy "C:\Program Files ( x86)\MSBuild\Microsoft\Portable" "C:\Program Files\dotnet\sdk\$(dotnet --version)\Microsoft\Portable\" /S /E 我从来没有做过也没有使用过那种东西。我也尝试从 PhoneNumbers.csproj 启动构建,我看到它在多个地方创建了一些 PhoneNumbers.dll,但我不知道我需要使用哪个。
  • 好的,所以我以管理员身份在 powershell 中运行命令 xcopy..... ,它似乎至少可以工作,但我不知道是什么。我在所有这些版本中都有 PhoneNumbers.dll net35;net40;net46;netstandard1.3;netstandard2.0;portable-net45+win8+wpa81+wp8 我已经尝试将其中一些 dll 统一起来,但是在项目资源管理器中添加 .dll 文件时,我看不到他的脚本,也无法使用他们在代码中。真的很抱歉打扰你,但我完全迷路了

标签: visual-studio unity3d


【解决方案1】:

一旦对要在 Unity 中使用的项目进行构建,然后从构建中找到 DLL 输出。我建议您进行发布构建,但现在如果您不熟悉 Visual Studio,请使用您能够构建的内容。如果有多个目录,那么您只需要一个 - 最好使用的一个是任何标有“.NET Standard”的目录,看起来您有一个 .net standard 2.0 目录。 转到 Assets 文件夹中的 Unity 项目,如果还没有 Plugins 文件夹,请创建一个。然后在 Assets/Plugins 中创建一个文件夹,命名为任何你想要的库 - 在这种情况下 PhoneNumber 就可以了。因此,您将拥有 Assets/Plugins/PhoneNumber,并且您将在那里复制/粘贴 NetStandard2 文件夹的内容。 最后你应该有 Assets/Plugins/PhoneNumber/PhoneNumber.dll

获得该 dll 后,您可以切换回 Unity,并通过检查 Unity 控制台是否有任何错误来查看它是否正常工作。您可能会收到错误消息说它无法加载 DLL。几乎总是如果它无法加载 DLL,那是因为缺少依赖的 DLL——这就是为什么我说要复制“NetStandard2”文件夹中的整个文件夹内容,因为它可能包含的不仅仅是 PhoneNumber.dll——它可能有它是必要的依赖的 dll 也是。

如果没有,您可以阅读错误输出,并希望获得有关缺少哪些依赖 dll 的线索。您还可以在 Visual Studio 中展开依赖项。 通常,无法在 Unity 中加载 DLL 是因为缺少依赖 DLL。展开 Visual Studio 右侧解决方案资源管理器窗口中项目名称下的依赖项,将显示它需要哪些库。您在依赖项下看到的大部分内容(如果不是全部)都需要一个类似命名的 dll。在 netstandard2.0 依赖项下,我看到了 System.Collections.Immutable - 所以您可能需要一个 System.Collections.Immutable.dll,当您构建项目时,它应该(通常)位于输出文件夹中。您还需要在您的 PhoneNumber 文件夹中的 Unity 中的该 dll 以及 PhoneNumber.dll

【讨论】:

  • 所以在构建项目之后,我如你所说将 NetStandard2 中的所有内容放在我的 Assets/Plugins/PhoneNumbers 文件夹中,但它仍然无法正常工作。在 NetStandard2 中只有 PhoneNumbers.dll 1 .pdb 和 1 .xml。所以我在另一个版本中搜索,发现在 Net46 中我有:PhoneNumbers.dll、System.Buffers.dll、System.Collection.Immutable.dll、System.Memory.dll 和 System.Runtime.CompileServices.Unsafe.dll。所以我已经将它们全部粘贴到我的 Assets/Plugins/PhoneNumbers 中,但我仍然无法在我的代码中访问它,而且我没有任何错误,所以我不知道出了什么问题。
  • 小更新,我已经把PhoneNumbers文件夹从Assets/Plugins中移出,直接放到Assets文件夹中,现在终于可以放“using PhoneNumbers;”了没有任何问题,它是识别。我现在遇到的问题是,我似乎只能访问 PhoneNumbers 的 PhoneNumberType 枚举,但不能访问我需要的所有其他方法。
  • 我成功了,我终于成功了,我他妈的是个笨蛋。当我构建 PhoneNumbers.csproj 时,他在一个 .zip 文件夹中,他只找到了 PhoneNumberType.cs 的引用。解压后,他找到了我需要的所有其他 .cs 的所有引用。再次感谢你,你真的帮了我很多。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多