Согласно списку глобальных инструментов .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 .