如何以编程方式找到由 Nuget 恢复的 DLL?
How can I programmatically find a DLL restored by Nuget?
用户执行 dotnet add package <SomePackage>
后,DLL 将安装到类似于以下的路径:
C:\Users\USER\.nuget\packages\SomePackage.0.2\lib\netstandard2.0\SomePackage.dll
如何以编程方式找到此路径?我看到 obj/project.assets.json
中有一些我可以解析的信息,还有一个有趣的 DependencyContextJsonReader class 在 dotnet github 组织下。
但是,我找不到关于此的文档或讨论,我不确定这是否是因为我采用了错误的方法。
一些背景:
我正在编写一个可以搭建 C# 项目脚手架的工具。它结合使用 dotnet
命令行工具和 Roslyn Workspace API 与生成的项目进行交互。我现在想允许用户将 Nuget 包安装到这个生成的解决方案中。我调用 dotnet add package SomePackage
效果很好,现在我想使用 AddReferences
API 将 DLL 添加到 Roslyn Project
对象,这需要实际的 DLL。
我找到了使用 nuget 客户端库执行此操作的方法。
本质上,我可以直接从我的应用程序使用 NuGet 客户端库来安装包,而不是使用 dotnet add package
命令。然后我可以通过 PackagePathResolver.GetInstalledPath
方法访问完整路径。
马丁·比约克斯特伦的 post、Revisiting the NuGet v3 Libraries, goes into much more detail, and a fully working code sample from Martin is available in this gist。
用户执行 dotnet add package <SomePackage>
后,DLL 将安装到类似于以下的路径:
C:\Users\USER\.nuget\packages\SomePackage.0.2\lib\netstandard2.0\SomePackage.dll
如何以编程方式找到此路径?我看到 obj/project.assets.json
中有一些我可以解析的信息,还有一个有趣的 DependencyContextJsonReader class 在 dotnet github 组织下。
但是,我找不到关于此的文档或讨论,我不确定这是否是因为我采用了错误的方法。
一些背景:
我正在编写一个可以搭建 C# 项目脚手架的工具。它结合使用 dotnet
命令行工具和 Roslyn Workspace API 与生成的项目进行交互。我现在想允许用户将 Nuget 包安装到这个生成的解决方案中。我调用 dotnet add package SomePackage
效果很好,现在我想使用 AddReferences
API 将 DLL 添加到 Roslyn Project
对象,这需要实际的 DLL。
我找到了使用 nuget 客户端库执行此操作的方法。
本质上,我可以直接从我的应用程序使用 NuGet 客户端库来安装包,而不是使用 dotnet add package
命令。然后我可以通过 PackagePathResolver.GetInstalledPath
方法访问完整路径。
马丁·比约克斯特伦的 post、Revisiting the NuGet v3 Libraries, goes into much more detail, and a fully working code sample from Martin is available in this gist。