Unity中的NuGet软件包

时间:2018-11-23 13:27:35

标签: unity3d dependencies nuget dependency-management

您好,其他开发人员,

我想在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?

感谢您的努力和时间。

BlazeOHTion

6 个答案:

答案 0 :(得分:7)

这里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:

enter image description here

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

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

答案 1 :(得分:5)

您真的不想沿着将Unity配置为自动与Nuget一起使用的道路走。那篇文章太老了。使用Unity 2018,您将获得.net标准2.0兼容性级别,这对于Nuget软件包而言应该是完美的。只需使用一个单独的VS项目(如本文中所述)下载该软件包,然后获取DLL的netstandard20版本并将其放置在Unity项目中。

答案 2 :(得分:5)

只是以为我会添加它以防任何人

我使用了Nuget for Unity资产(免费)来导入一个程序包(websocketsharp),这确实很容易而且很轻松。 VS中的引用也可以立即工作

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

答案 3 :(得分:0)

您必须在包文件夹/插件中手动设置下载的nuget / is。 Nuget不知道哪个插件可以使用unity,以及如何使用。您可以在检查器中设置其参数:编辑器,独立... x86,x64 ...

答案 4 :(得分:0)

NuGet2Unity允许将任何Nuget程序包转换为'.unitypackage'。 我已经使用它来转换“ SpecFlow”,并且能够导入生成的Unity Package。 签出他们的Examples

它对我有用:

  

dotnet.exe运行-n specflow --version 3.0.225

请注意,您可能需要跳过NugetPackage提供的依赖关系,而依赖关系已经由unitit本身提供。

答案 5 :(得分:0)

只需使用原生 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\<username>\.nuget\packages 处的缓存。如果您使用私有 nuget 提要并且您的缓存中已经存在符合您所需的软件包名称和版本但来自不同提要的软件包,这将非常有用。

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

另见

nuget.config reference