PrunePackageReference приватизирует прямые перерезаемые ссылки

Функция PrunePackageReference автоматически удаляет транзитивные пакеты, предоставляемые целевой платформой. При этом изменении функция также помечает элементы, которые PackageReference можно запустить напрямую с PrivateAssets=all атрибутами и IncludeAssets=none атрибутами. Эти атрибуты препятствуют отображению пакетов в созданных списках зависимостей для пакетов.

Представленная версия

.NET 10

Предыдущее поведение

Ранее, если обрезка была включена, непосредственно удаляемые элементы PackageReference все равно появлялись в списке зависимостей nuspec, даже если пакет был предоставлен платформой. (Если проект предназначен для .NET 10, возможно, он создал NU1510 предупреждение.)

Например, рассмотрим проект с несколькими целевыми объектами со следующей конфигурацией:

<PropertyGroup>
  <TargetFramework>net10.0;net472</TargetFramework>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="System.Text.Json" Version="9.0.8" />
</ItemGroup>

Такой файл проекта создал nuspec-файл с зависимостями для обеих целевых платформ:

<dependencies>
  <group targetFramework=".NETFramework4.7.2">
    <dependency id="System.Text.Json" version="9.0.8" />
  </group>
  <group targetFramework="net10.0">
    <dependency id="System.Text.Json" version="9.0.8" />
  </group>
</dependencies>

Новое поведение

Начиная с .NET 10, при включении обрезки непосредственно подлежащие PackageReference элементы автоматически помечаются с помощью PrivateAssets=all и IncludeAssets=none, что исключает их из созданных зависимостей для целевых фреймворков, где они предоставляются платформой. (Однако если проект предназначен для .NET 10 или более поздней версии, вы по-прежнему получите NU1510 предупреждение , пока не удалите ссылку из проекта.)

В той же конфигурации проекта теперь создается nuspec-файл с неизменяемой зависимостью, удаленной из целевой платформы, предоставляющей ее (.NET 10):

<dependencies>
  <group targetFramework=".NETFramework4.7.2">
    <dependency id="System.Text.Json" version="9.0.8" />
  </group>
  <group targetFramework="net10.0">
  </group>
</dependencies>

Тип критического изменения

Это изменение поведения.

Причина изменения

Это изменение гарантирует точное соответствие зависимостей пакета фактическим требованиям для каждой целевой платформы. Он предотвращает отображение ненужных ссылок на пакеты в созданных пакетах, когда эти API уже предоставляются целевой платформой.

  • Если вы создадите пакет и получите NU1510 предупреждение, следуйте инструкциям.
  • Если вы создаете пакет и созданные зависимости nuspec не содержат ссылочный пакет для любой целевой платформы, удалите ссылку из файла проекта, так как она не нужна.
  • Если указанный пакет отображается в nuspec-файле , действие не требуется.

Затронутые API

Никакой.

См. также