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

时间:2017-07-26 13:27:30

标签: .net nuget nuget-package

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

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

通过

提供了答案here
nuget locals packages-cache -list

但它不是.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包)

1 个答案:

答案 0 :(得分:8)

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

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

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