0

用户执行 后dotnet add package <SomePackage>,DLL 将安装到类似于以下的路径:

C:\Users\USER\.nuget\packages\SomePackage\1.0.2\lib\netstandard2.0\SomePackage.dll

如何以编程方式找到此路径?我看到其中有一些obj/project.assets.json我可以解析的信息,以及dotnet github 组织下的一个有趣的DependencyContextJsonReader类。

但是,我找不到有关此的文档或讨论,我不确定这是否是因为我采用了错误的方法。

一些背景知识:我正在编写一个可以构建 C# 项目的工具。它使用dotnet命令行工具和 Roslyn Workspace API 的组合与生成的项目进行交互。我现在想允许用户将 Nuget 包安装到这个生成的解决方案中。我调用dotnet add package SomePackage哪个工作正常,现在我想使用API将 DLL 添加到 RoslynProject对象,这需要实际的 DLL。AddReferences

4

1 回答 1

1

我找到了一种使用 nuget 客户端库的方法。

dotnet add package本质上,我可以直接从我的应用程序中使用 NuGet 客户端库来安装包,而不是直接使用命令。PackagePathResolver.GetInstalledPath然后我可以通过该方法访问完整路径。

Martin Björkström 的博文 Revisiting the NuGet v3 Libraries更详细地介绍了 Martin Björkström 的完整工作代码示例,可在此 gist中找到。

于 2019-08-03T13:10:48.143 回答