更改 Visual Studio 2017 使用的 NuGet 包文件夹

Change NuGet package folders used by Visual Studio 2017

在任何基于 csprojproject.json 的 .NET Core 项目中不再有 packages 解决方案文件夹。

NuGet CLI 获取已用缓存文件夹列表:

nuget locals all -list

回复:

http-cache: C:\Users\<foo>\AppData\Local\NuGet\v3-cache
global-packages:  C:\Users\<foo>\.nuget\packages\
temp: C:\Users\<foo>\AppData\Local\Temp\NuGetScratch

如何更改或覆盖这些位置?

缓存位置

.NET Core 和 Visual Studio 2017 不再存在本地解决方案包文件夹。

NuGet is now fully integrated into MSBuild:

Solution-local packages folders are no longer used – Packages are now resolved against the user’s cache at %userdata%.nuget, rather than a solution specific packages folder. This makes PackageReference perform faster and consume less disk space by using a shared folder of packages on your workstation.

NuGet 4.0+ 使用至少两个全局包位置:

  • 用户特定:%userprofile%\.nuget\packages\
  • 机器范围:%ProgramFiles(x86)%\Microsoft SDKs\NuGetPackages\"

您可以使用以下控制台命令列出所有用户特定的文件夹:

nuget locals all -list

请注意此处未列出计算机范围的文件夹。但是,它是在 Visual Studio 设置中定义的:

Options -> NuGet Package Manager -> Package Sources

配置文件

NuGet.config 个文件 are located here:

  • 用户特定:%APPDATA%\NuGet\
  • 机器范围:%ProgramFiles(x86)%\NuGet\Config\

可以在多个级别更改和覆盖 NuGet 设置:

  • 项目
  • 解决方案
  • 用户
  • 机器

还有更多!在此处阅读有关 NuGet.config 层次优先级排序的更多信息:How settings are applied

例如,globalPackagesFolder 参数更改包缓存位置。看看这个 NuGet.config 例子:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <clear />
    <add key="globalPackagesFolder" value="c:\packages" />
  </config>
</configuration>

来自MS docs

全局包

  • Windows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages

使用 NUGET_PACKAGES 环境变量、globalPackagesFolder 或 repositoryPath 配置设置(分别使用 PackageReference 和 packages.config 时)或 RestorePackagesPath MSBuild 覆盖属性(仅限 MSBuild)。 环境变量优先于配置设置。

将 .nuget 文件夹 (c:\users{username}.nuget) 从具有互联网连接和更新包的开发电脑复制到没有互联网连接的电脑也对我有用.