.Net Core 2.0 NuGet文件的位置是什么?

5
当查找NuGet软件包存储位置时,我们发现一些dll文件存储在C:\Users\Username\.nuget\packages,而另一些则存储在C:\Program Files\dotnet\sdk\NuGetFallbackFolder
例如,在我的开发计算机上,microsoft.aspnetcore.all软件包文件夹存在于这两个目录中:C:\Users\Username\.nuget\packages包含2.0.7和2.1.0,而C:\Program Files\dotnet\sdk\NuGetFallbackFolder包含2.0.0、2.0.3、2.0.5、2.0.6和2.0.8版本。
根据Ovais Mehboob Ahmed Khan的书《C# 7 and .NET Core 2.0 High Performance》,默认路径应该是C:\Users\Username\.nuget\packages
为什么要将文件分别存储在不同的文件夹中?
注意:我们在大多数项目中引用microsoft.aspnetcore.all 2.0.8版本。我们引用的其他软件包在这两个文件夹之间交替使用。

1
我认为 NuGetFallbackFolder 在 SDK 安装期间填充,作为一种“您可能需要的软件包”步骤。(可能在安装新工具/模板时也会这样,但我不确定。) - Jon Skeet
1
.NET Core 文档 中得知 - NuGetFallbackFolder 包含了在 dotnet restore 步骤中 SDK 使用的 NuGet 包的缓存。 另一个文件夹是用于项目使用的 NuGet 包,这些包不包括在 .NET Core SDK 中,并且对于不使用 NuGetFallbackFolder 的项目(如非 .NET Core 项目)也适用。 - Matt Ward
1个回答

2
.NET Core引入了Nuget缓存的概念(有点类似于GAC)。所有下载的包只会下载一次到一个特定的文件夹,并在所有项目中重复使用。这是因为.NET Core 2.x-3.x现在由数百个包组成。所以框架现在非常细粒度,你可以使用你需要的东西。这创建了一种新类型的问题——Nuget Hell(以前我们有DLL Hell)。为了让开发人员的生活更轻松,微软引入了“聚合”包,例如microsoft.aspnetcore.all(它什么也不包含,只是引用了所有内容,但实际上如果你进行自包含构建,它只会包含你正在使用的内容而不是所有DLL)。
正如您所提到的,现在您可以在用户帐户下找到已安装的Nuget包,例如: C:\ Users \ .nuget \ packages。
根据this文档,您可以运行此命令,它将列出您机器上的所有Nuget文件夹:
dotnet nuget locals all -l

结果将类似于这样(文件夹名称自我解释):
C:\Users\...>dotnet nuget locals all -l
info : http-cache: C:\Users\...\AppData\Local\NuGet\v3-cache
info : global-packages: C:\Users\...\.nuget\packages\
info : temp: C:\Users\...\AppData\Local\Temp\NuGetScratch
info : plugins-cache: C:\Users\...\AppData\Local\NuGet\plugins-cache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接