Udostępnij przez


PrunePackageReference prywatyzuje bezpośrednie odwołania do oczyszczania

Funkcja PrunePackageReference automatycznie usuwa pakiety przechodnie dostarczane przez platformę docelową. Dzięki tej zmianie funkcja oznacza również bezpośrednio przycinane PackageReference elementy z atrybutami PrivateAssets=all i IncludeAssets=none . Te atrybuty uniemożliwiają wyświetlanie pakietów na wygenerowanych listach zależności dla pakietów.

Wprowadzona wersja

.NET 10

Poprzednie zachowanie

Wcześniej, jeśli przycinanie było włączone, elementy bezpośrednio podlegające przycinaniu nadal pojawiały się na wygenerowanej liście zależności .nuspec, nawet jeśli pakiet był dostarczony przez platformę. (Jeśli projekt dotyczy platformy .NET 10, może wygenerować NU1510 ostrzeżenie).

Rozważmy na przykład projekt wielowersyjny z następującą konfiguracją:

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

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

Taki plik projektu wygenerował plik nuspec z zależnościami dla obu platform docelowych:

<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>

Nowe zachowanie

Począwszy od wersji .NET 10, gdy przycinanie jest włączone, bezpośrednio przycinane elementy są automatycznie oznaczane za pomocą PrivateAssets=all i IncludeAssets=none, co wyklucza je z wygenerowanych zależności dla docelowych struktur platform, gdzie są one dostarczane przez platformę. (Jeśli jednak projekt jest przeznaczony dla platformy .NET 10 lub nowszej, nadal będzie wyświetlane NU1510 ostrzeżenie , dopóki nie usuniesz odwołania z projektu).

Ta sama konfiguracja projektu generuje teraz plik nuspec z przycinaną zależnością usuniętą z platformy docelowej , która ją udostępnia (.NET 10):

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

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Ta zmiana gwarantuje, że zależności pakietów dokładnie odzwierciedlają rzeczywiste wymagania dla każdej platformy docelowej. Zapobiega to wyświetlaniu niepotrzebnych odwołań do pakietów w wygenerowanych pakietach, gdy te interfejsy API są już udostępniane przez platformę docelową.

  • Jeśli tworzysz pakiet i otrzymujesz NU1510 ostrzeżenie, postępuj zgodnie z instrukcjami.
  • Jeśli tworzysz pakiet, a wygenerowane zależności nuspec nie zawierają pakietu, do którego odwołujesz się do żadnej platformy docelowej, usuń odwołanie z pliku projektu, ponieważ nie jest to potrzebne.
  • Jeśli przywołyżony pakiet pojawi się w pliku nuspec , nie jest wymagana żadna akcja.

Interfejsy API, których dotyczy problem

Żaden.

Zobacz też