Сгенерировать краткий обзор лицензии для ядра dotnet - PullRequest
0 голосов
/ 14 ноября 2018

Для внешнего интерфейса нашего приложения (веб-приложения javascript) мы можем сгенерировать список всех лицензий, используемых нашими зависимостями.Есть ли способ сделать это для наших пакетов nuget на стороне сервера?

Причина, по которой это работает для внешнего интерфейса, заключается в том, что у нас есть каталог node_modules, содержащий полный набор разрешенных зависимостей версий.В старом стиле nuget (с использованием packages.config и папкой пакетов) мы могли бы использовать аналогичное решение, но базовые проекты dotnet используют глобальное хранилище пакетов.

Наше текущее направление движения состоит в том, чтобы использовать метаданные из API-интерфейса nuget и таким образом проходить по дереву, но это приводит к появлению целого списка других проблем, которые необходимо решить (разрешение неполных номеров версий, работа с отсутствующими / неправильными данными).данные лицензии).

1 Ответ

0 голосов
/ 15 ноября 2018

Это на самом деле не о .NET Core против "старого" стиля csproj. Проекты SDK могут создавать проекты .NET Framework, поэтому не ограничиваются .NET Core. Это также не относится к SDK-проектам против "старых" проектов, поскольку "старые" проекты могут использовать PackageReference.

Таким образом, если у вас есть решение с несколькими файлами packages.config, пакеты будут восстановлены в одну папку пакетов, но packages.config не поддерживает транзитивные зависимости и завершается ошибкой, если не указана точная запрашиваемая версия. имеется в наличии. Таким образом, легко перебрать каждый проект, прочитать packages.config и найти точный пакет в папке пакетов решений. Пакет также должен существовать в папке глобальных пакетов, но есть сценарии, в которых это не может быть правдой.

PackageReference извлекает транзитивные зависимости и выбирает разные версии, когда возникают конфликты или запрашиваемая версия недоступна. Однако, когда восстановление прошло успешно, он записывает файл obj\project.assets.json, который вы можете прочитать. В нем перечислены полный график восстановления и точная версия каждого используемого пакета. Используя эту информацию, вы можете найти точную версию каждого пакета, который используется в папке глобального пакета.

Насколько я понимаю, в npm обычно, если не требуется, помещать файл лицензии в пакет, который сохраняется на компьютере пользователя. К сожалению, это не относится к пакетам nuget. Но, по крайней мере, используя файл активов, вам не нужно выяснять дерево зависимостей или беспокоиться о том, что ваша логика выбора версии отличается от логики nuget.

...