【问题标题】:Change NuGet package folders used by Visual Studio 2017更改 Visual Studio 2017 使用的 NuGet 包文件夹
【发布时间】:2017-09-18 09:44:49
【问题描述】:
任何基于csproj 或project.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
如何更改或覆盖这些位置?
【问题讨论】:
标签:
nuget
.net-core
visual-studio-2017
【解决方案1】:
缓存位置
.NET Core 和 Visual Studio 2017 不再存在解决方案本地包文件夹。
NuGet is now fully integrated into MSBuild:
解决方案本地包文件夹不再使用 - 包现在
针对 %userdata%.nuget 处的用户缓存进行解析,而不是
解决方案特定的包文件夹。这使得 PackageReference 执行
使用共享文件夹更快,消耗更少的磁盘空间
工作站上的软件包。
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>
【解决方案2】:
来自MS docs:
全局包
- Windows:%userprofile%\.nuget\packages
- Mac/Linux:~/.nuget/packages
使用 NUGET_PACKAGES 环境变量、globalPackagesFolder 或 repositoryPath 配置设置(分别使用 PackageReference 和 packages.config 时)或 RestorePackagesPath MSBuild 属性(仅限 MSBuild)进行覆盖。 环境变量优先于配置设置。
【解决方案3】:
将 .nuget 文件夹 (c:\users{username}.nuget) 从具有 Internet 连接和更新包的开发 PC 复制到没有 Internet 连接的 PC 也适用于我。