如何以编程方式获取nuget缓存文件夹位置

Pat*_*eam 15 .net nuget nuget-package

我需要从.NET应用程序(不是.NET Core应用程序)获取NuGet存储其包的目录列表.

我知道默认情况下它是C:\Users\[YourUsername]\.nuget\packages一个选项是迭代所有用户假设当前运行该进程的Windows用户拥有访问其他用户数据的权限.此外,如果用户更改了此默认目录,我会被卡住.

一个答案是提供在这里通过

nuget locals packages-cache -list
Run Code Online (Sandbox Code Playgroud)

但它不是.NET代码,根据答案它似乎是一个过时的选项.


此外,我想了解.NET Core NuGet包位置的逻辑,因为我可以在3个位置看到一些.NET Core包:

  • C:\Program Files\dotnet\shared\Microsoft.NETCore.App (不包含AspNetCore包)
  • C:\Users\[UserName]\.nuget\packages (包含AspNetCore包)
  • C:\Program Files (x86)\Microsoft SDKs\NuGetPackages (包含AspNetCore包)

Igo*_*r B 8

为了实现这一点,您需要使用相同的代码和库nuget.exe:

  1. 将nuget包安装NuGet.Configuration到您的项目中
  2. 添加using NuGet.Configuration到文件的顶部
  3. 使用以下代码(nuget.exe在引擎盖下使用自己):
var settings = Settings.LoadDefaultSettings(null);
Console.WriteLine(SettingsUtility.GetGlobalPackagesFolder(settings));
Run Code Online (Sandbox Code Playgroud)

您还可以检查nuget.exe以ILSpy了解它是如何工作的或在github NuGet/NuGet.Client上使用相关的源代码