unity3d Unity中的NuGet软件包

xsuvu9jc  于 2022-11-15  发布在  其他
关注(0)|答案(8)|浏览(332)

我想在Unity中使用一些NuGet包。我实现了Unity根据本文找到下载的DLL可以配置nuget.config文件将软件包下载到Assets文件夹下的Plugins文件夹中。(例如net46,netcore50,netstandard21,等等),Unity不喜欢多个同名的DLL。我知道我可以简单地手工将DLL放入Plugins文件夹,但不幸的是,这不是一个让我满意的解决方案。
你知道我该如何解决这个问题吗?有没有可能配置NuGet为每个依赖项只下载一个DLL?

fae0ux8s

fae0ux8s1#

我想我应该加上这个以防有人知道
我使用Nuget for Unity资产(免费的)来导入一个包(websocketsharp),这真的很容易,而且没有痛苦。
你要导入的软件包自然必须与Unity兼容,但是即使你手动导入也是一样的。

vuv7lop3

vuv7lop32#

这里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指南,我已经在Unity中导入了newtonsoft.json包 *
5t7ly7z5

5t7ly7z53#

你真的不想走上配置Unity来自动使用Nuget的道路。那篇文章已经相当老了。在Unity 2018中,你得到了一个.net标准2.0的兼容级别,这应该是完美的Nuget包。简单地使用一个单独的VS项目下载包(如文章中所提到的),然后把这个DLL的netstandard20版本放在你的Unity项目中。

to94eoyn

to94eoyn4#

使用原生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 feed,并且缓存中已经存在符合您所需包名和版本但来自不同feed的包,这将非常有用。
这种方法的缺点是,在./Assets/Plugins中,您将同时拥有netstandard2.0-Library和Nuget包,如下所示:x1c 0d1x Nuget软件包通常不是很大,所以这不应该是一个因素。还要注意的是,这种方法不会解决软件包依赖关系,你必须自己在packages.config中列出它们。
编辑:我注意到另一个缺点:针对多个框架的NugetPackages也将被安装。这将导致Unity-Error,您需要自己删除这些框架安装。

另请参阅

nuget.config reference

j5fpnvbx

j5fpnvbx5#

您可以使用本地dotnet restorenuget restore命令用nuget软件包填充asset文件夹。

获取软件包

指定在命令行或nuget.config文件中放置软件包的位置,以便将其作为资产包含在Unity中。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
      <add key="globalPackagesFolder" value="./NuGetPackages" />
  </config>
</configuration>

这可以放在与您的dotnet解决方案相同的文件夹中,在这种情况下,您可以在解决方案文件夹中还原带有dotnet restorenuget restore的包。

配置Unity中使用的版本

在Unity编辑器中,从软件包中找到dll文件

在检查器中打开文件,并针对平台禁用它,或有条件地针对构建约束禁用它。

这被保存到.dll.meta文件中,与.dll文件在同一个目录下。

配置源代码管理以保留.dll.meta文件

这个.gitignore将从包中排除所有内容,但将保留指定Unity使用哪个版本的.dll.meta文件。

**/NuGetPackages/**
!**/NuGetPackages/**/
!**/NuGetPackages/**/*.dll.meta
ztyzrc3y

ztyzrc3y6#

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

txu3uszq

txu3uszq7#

有一个NuGet2Unity可以将任何Nuget包转换成一个'. unitypackage'。我已经用它来转换“SpecFlow”,我能够导入得到的Unity包。看看他们的例子。
它对我很有效:
dotnet.exe运行-n规范流--版本3.0.225

  • 请注意,您可能需要跳过由NugetPackage提供的依赖项,而这些依赖项已由Unity本身提供。*
hlswsv35

hlswsv358#

对我有效的流程是:
1.下载NuGet软件包
1.解压缩并获取.NET 4.x的DLL
1.在“资源”下创建“插件”文件夹(资源/插件)
1.将DLL粘贴到Plugins文件夹中
然后Unity在控制台中抛出了一堆错误,所有这些错误看起来都是兼容性问题,所以我回到nuget.org并查看包的依赖关系。然后我对Unity最初抛出错误的每个包重复上述步骤。

相关问题