【问题标题】:NuGet packages in UnityUnity 中的 NuGet 包
【发布时间】:2018-11-23 13:27:35
【问题描述】:

我想在 Unity 中使用一些 NuGet 包。我实现了Unity根据这篇文章(https://www.what-could-possibly-go-wrong.com/unity-and-nuget/)找到下载的DLL。 nuget.config 文件可以配置为将包下载到 Assets 文件夹内的 Plugins 文件夹中。问题是 NuGet 会下载每个 DLL 的多个版本(例如 net46、netcore50、netstandard21 等),而 Unity 不喜欢具有相同名称的多个 DLL。我知道我可以简单地将 DLL 手动放入 Plugins 文件夹中,但不幸的是,这不是一个让我满意的解决方案。

您知道我该如何解决这个问题吗?是否可以将 NuGet 配置为只为每个依赖项下载一个 DLL?

【问题讨论】:

标签: unity3d dependencies nuget dependency-management


【解决方案1】:

只是想我会添加这个以防它帮助任何人

我使用Nuget for Unity 资产(免费)来导入一个包(websocketsharp),它真的很容易和无痛。 VS 中的引用也立即生效

您尝试导入的包自然必须与 Unity 兼容,但即使您手动导入也是如此。所以我建议尝试一下

【讨论】:

  • 怎么知道包是否兼容unity?
  • 通常在包自述文件中说它与 Unity 兼容。如果没有,那么最好的找出方法是尝试导入它并查看 Unity 报告任何兼容性错误。 this post 中有一些更有用的信息
  • 包管理器对该包抛出各种错误。
  • @BrainSlugs83 在 repo 中提交问题可能是个好主意
【解决方案2】:

这里are the details

1. go to your desired NuGet package webpage.
2. on the right side **Download Package** option click it.
3. your package **.nupkg** file will be downloaded.
4. change its extension to .zip and extract it
5. go to lib and copy your package dll file from net or any netstandard folder. For [your unity project compatibility purposes][2] view this:

    6. open unity workspace and create plugin folder 
    7. paste your dll file here.

这里是 video 指南,我已经统一导入了 newtonsoft.json 包

【讨论】:

  • 但是如果您有两个同名的 .dll 文件怎么办?一个 dll 用于 x64,另一个用于 x86 @Muhammad Fauzan Khan
  • 你应该在插件文件夹 x86 和 x64 中创建两个文件夹并放置你的 dll 文件
  • 作为记录,根据这个答案,您应该创建MyUnityProject/Assets/Plugins 并将您的.dll 文件放在那里
【解决方案3】:

您真的不想走上将 Unity 配置为自动使用 Nuget 的道路。那篇文章比较老了。使用 Unity 2018,您可以获得 .net 标准 2.0 兼容级别,这对于 Nuget 包来说应该是完美的。只需使用单独的 VS 项目(如文章中所述)下载包,然后获取 netstandard20 版本的 DLL 并将其放入您的 Unity 项目中。

【讨论】:

  • 最有可能的是,如果该库是在考虑其他平台的情况下实现的。 JSON.Net(甚至是 dotnet 标准版本)在 AOT 平台上尤其存在问题,至少在 Unity 内部是这样。
  • 我刚刚在一个 IL2CPP 项目中使用了 Json.NET,它运行良好。
  • 对于在 EditMode 测试中使用 FluentAssertions:将 netstandard20 DLL 放到 Plugins 文件夹中,然后打开 EditMode 程序集定义并添加 FluentAssertions.dll 的程序集参考。 (可能需要重新启动一些 Unity)。然后在您的测试 .cs 文件中,添加“使用 FluentAssertions;”你应该很好。
  • 你救了我的命。非常感谢@Arshia001
【解决方案4】:

使用本机 Nuget(适用于仅针对一个框架的包)

您可以创建一个nuget.config 和一个packages.nuget 文件并将它们放在项目的根目录中,而不是手动下载所有内容。

nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
      <!-- This makes Nuget to place the packages at ./Assets/Plugins -->
      <add key="repositoryPath" value="./Assets/Plugins" />
  </config>
  <packageSources>
    <clear /> <!-- Delete packageSources from other nuget.configs -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

packages.nuget:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <!-- targetFramework="netstandard2.0" makes nuget to unzip the netstandard2.0 version of the package-->
  <package id="PackageA" version="1.0.0" targetFramework="netstandard2.0" />
  <package id="PackageADependsOnThis" version="1.0.0" targetFramework="netstandard2.0" />
  <package id="PackageB" version="1.0.0" targetFramework="netstandard2.0" />
</packages>

用法

要恢复这些包,请在终端中打开项目的根目录并输入以下内容:

nuget restore -NoCache

您可能希望省略 -NoCache,它会阻止 nuget 使用 C:\Users\&lt;username&gt;\.nuget\packages 处的缓存。如果您使用私有 nuget 提要,并且缓存中已有包符合您所需的包名称和版本但来自不同的提要,这将非常有用。

这种方法的缺点是您将同时拥有./Assets/Plugins netstandard2.0-Library 和 Nuget 包,如下所示: Nuget 包通常不是那么大,所以这不应该是一个因素。 另请注意,这种方法不会解决包依赖关系,您必须自己在packages.config 中列出它们。

编辑:我注意到另一个缺点:也将安装针对多个框架的 NugetPackages。这会导致 Unity-Error,需要自己删除这些框架安装。

另见

nuget.config reference

【讨论】:

    【解决方案5】:

    您必须在包文件夹/插件中手动设置下载的 nuget /is。 Nuget 不知道哪个插件可以使用 unity 以及如何使用。你可以在inspector中设置它们的参数:editor,standalone ... x86,x64 ...

    【讨论】:

      【解决方案6】:

      NuGet2Unity 允许将任何 Nuget 包转换为“.unitypackage”。 我用它来转换“SpecFlow”,并且能够导入生成的 Unity 包。 查看他们的Examples

      它对我有用:

      dotnet.exe run -n specflow --version 3.0.225

      请注意,您可能需要跳过由 NugetPackage 提供的依赖项,这些依赖项已经由 unity 本身提供。

      【讨论】:

      • NuGet2Unity 链接已损坏。
      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多