Это сложно. У NuGet есть два способа использования пакетов, и эти два способа работают несколько по-разному. Оригинальный способ был с packages.config
(ПК), а новый - PackageReference
(PR).
NuGet с ПК не имеет понятия времени выполнения, поэтому они часто используются, и, посмотрев на пакет, кажется, что это тот случай, когда автор пакета связывает реквизиты MSBuild и / или целевые файлы в пакете, и эти цели изменяют сборку для копирования собственных файлов при сборке. В проекте с использованием ПК, когда пакет установлен, все зависимости также установлены, поэтому все пакеты являются прямыми зависимостями проекта, и все цели сборки в пакетах импортируются в проект.
Проекты, использующие NuGet с PR, с другой стороны, могут ссылаться только на свои прямые зависимости, но зависимости пакетов приходят транзитивно. NuGet говорит MSBuild только импортировать цели сборки из прямых зависимостей, а не транзитивных зависимостей. Так что это объясняет поведение, которое вы видите.
В NuGet 5.0 (выпущенной с Visual Studio 2019, и я не могу вспомнить, какие версии .NET Core SDK) мы добавили функцию buildTransitive
, которая будет извлекать реквизиты / цели сборки из транзитивных пакетов. Однако для его использования требуется, чтобы автор пакета повторно авторизовал свои пакеты.