Как программно найти DLL, восстановленную Nuget?

После того, как пользователь делает dotnet add package <SomePackage>, DLL будет установлена ​​по пути, аналогичному следующему:

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

Как я могу найти этот путь программно? Я вижу, что есть некоторая информация в obj/project.assets.json что я мог разобрать, а также интересный класс DependencyContextJsonReader в рамках организации Ditnet GitHub.

Однако я не могу найти никакой документации или обсуждений по этому поводу, и я не уверен, что это потому, что я использую неправильный подход.

Немного предыстории: я пишу инструмент, который может создавать проекты на C#. Он использует комбинацию dotnet инструменты командной строки и API Roslyn Workspace для взаимодействия с созданным проектом. Я пытаюсь добавить поддержку nuget к этому, и мне нужно загрузить библиотеки DLL, на которые есть ссылки в элементах PackageReference файла csproj.

0 ответов

Я нашел способ сделать это с помощью клиентских библиотек nuget.

По сути, вместо того, чтобы обстреливать dotnet add package, я могу использовать клиентские библиотеки NuGet прямо из своего приложения для установки пакетов. Затем у меня есть доступ к полному пути черезPackagePathResolver.GetInstalledPath метод.

В сообщении Мартина Бьёркстрёма " Пересмотр библиотек NuGet v3" содержится гораздо больше деталей, и в этом содержании доступен полностью рабочий пример кода от Мартина.

Другие вопросы по тегам