Как программно найти 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" содержится гораздо больше деталей, и в этом содержании доступен полностью рабочий пример кода от Мартина.