如何以编程方式找到由Nuget恢复的DLL?

时间:2019-03-03 04:37:33

标签: c# .net-core nuget packagereference

用户执行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可以正常工作,现在我想使用Project API将DLL添加到Roslyn AddReferences对象,该API需要实际的DLL。

1 个答案:

答案 0 :(得分:0)

我找到了使用nuget客户端库执行此操作的方法。

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

MartinBjörkström的帖子Revisiting the NuGet v3 Libraries进行了更详细的介绍,来自Martin的完整工作代码示例为available in this gist