用户执行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。
答案 0 :(得分:0)
我找到了使用nuget客户端库执行此操作的方法。
从本质上讲,我可以直接从我的应用程序中使用NuGet客户端库来安装软件包,而不必使用dotnet add package
命令。然后,我可以通过PackagePathResolver.GetInstalledPath
方法访问完整路径。
MartinBjörkström的帖子Revisiting the NuGet v3 Libraries进行了更详细的介绍,来自Martin的完整工作代码示例为available in this gist。