Получить информацию о лицензии для всех используемых пакетов NuGet в .NET Core за пределами Visual Studio - PullRequest
2 голосов
/ 02 апреля 2019

В нашем проекте есть требование перечислить все лицензированные пакеты nuget.Было бы идеально сгенерировать их в какой-нибудь файл csv, json, xml.Это должно быть сделано сборкой или инструментом CI / CD.Проблема в том, что единственный способ получить этот список - позвонить:

Get-Package | Select-Object Id,LicenseUrl

в диспетчере пакетов Visual studios.Я также нашел несколько примеров сценариев PowerShell, но все они основаны на версиях .net до ядра .net и основаны на папке чтения пакетов, которая в версии ядра .net больше не существует.

Есть ли способдостичь того, что нам нужно в .NET Core?

С уважением.

1 Ответ

0 голосов
/ 02 апреля 2019

Согласно списку глобальных инструментов .NET Нейта МакМастера , существует инструмент под названием dotnet-project-licenses .Я никогда не использовал его, но вы можете попробовать его.

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

Первое использование dotnet list package --include-transitive, чтобы вывести список всех пакетов, используемых проектом, и проанализировать его вывод.У команды NuGet есть запрос , чтобы упростить анализ выходных данных, но, честно говоря, я думаю, что вам нужно всего 2 регулярных выражения, чтобы легко проанализировать их текущий вывод, только 1, если вас не интересуют TFM.Если ваш проект нацелен на несколько TFM, вы захотите дедуплицировать списки.

Как только у вас есть список идентификаторов пакетов и номеров версий (версии важны, поскольку пакет может изменять лицензии между версиями), вы можетенайдите расположение вашей глобальной папки с пакетами (gpf) dotnet nuget locals -l global-packages, затем используйте шаблон {gpf}\{lowercase package id}\{lowercase package version}\{lowercase package id}.{lowercase package version}.nuspec, чтобы загрузить nuspec в виде XML и найти лицензию.

Имейте в виду, что недавно NuGet устарела LicenseUrl и поощряет пакетавторам использовать выражения лицензии или встраивать свой файл лицензии в nupkg.Я полагаю, что встроенные лицензии представляют собой самую большую проблему для любого лицензионного инструмента, потому что, если вы не хотите анализировать текст лицензии и угадывать, какой лицензией она является, скорее всего, вам нужно будет заняться чем-то другим.Если все ваши пакеты приходят с nuget.org, вы можете настроить свой инструмент на создание URL-адресов на nuget.org/packages/{package id}/{package version}/license.Но если вы используете несколько источников, у вас нет возможности узнать, из какого источника поступил пакет, и другие каналы могут не иметь простого способа увидеть текст лицензии для встроенных лицензий.Чтобы сделать все "правильно", вам нужно найти источники пакетов, чтобы узнать, существуют ли этот конкретный идентификатор пакета и версия. Протокол NuGet V3 задокументирован, но протокол v2 намеренно не задокументирован, и некоторые сторонние серверы Nuget реализуют только протокол v2.Вы также можете изучить использование клиентских библиотек nuget .

...