NuGet-Warnung NU1510

Szenario 1

PackageReference System.Text.Json wird nicht gekürzt. Dieses Paket ist automatisch verfügbar und muss nicht explizit referenziert werden. Entfernen des PackageReference-Elements

Issue

Diese Warnung wird aufgrund der Beschnittung von NuGet-Abhängigkeitsdiagrammen ausgelöst und weist darauf hin, dass ein andernfalls nicht wiederhergestelltes Paket aufgrund eines direkten PackageReferenceElements wiederhergestellt wurde. Das benannte Paket kann gelöscht werden, wenn das direkte PackageReference Paket entfernt wird, da das zielorientierte .NET SDK dieselbe Version oder höher dieser Assembly bereitstellt.

Diese Warnung betrifft nur Pakete, die für die Beschnittung über das PrunePackageReference-Feature registriert sind. Er wird nur ausgelöst, wenn die PackageReference betreffende Person vollständig aus dem Projekt entfernt werden kann.

Beispiel 1

Wenn das gezielte .NET SDK eine entsprechende Version enthält, wählt die Konfliktauflösung von Abhängigkeiten die SDK-gebündelte Assembly aus:

  <PropertyGroup>
    <!-- 'System.Text.Json' is SDK-bundled in 'net10.0' -->
    <TargetFramework>net10.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <!-- The assembly provided by this reference will not be used -->
    <PackageReference Include="System.Text.Json" Version="10.0.0" />
  </ItemGroup>

Beispiel 2

Wenn das zielorientierte .NET SDK eine entsprechende Version für mehrere Frameworkziele enthält, wählt die Konfliktauflösung von Abhängigkeiten die entsprechende SDK-gebündelte Assembly für jedes Ziel aus:

  <PropertyGroup>
    <!-- 'System.Text.Json' is SDK-bundled in both TFMs -->
    <TargetFrameworks>net9.0;net10.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <!-- Neither of the assemblies provided by these references will be used -->
    <PackageReference Include="System.Text.Json" Version="10.0.0" Condition="'$(TargetFramework)' == 'net10.0'"/>
    <PackageReference Include="System.Text.Json" Version="9.0.4" Condition="'$(TargetFramework)' == 'net9.0'"/>
  </ItemGroup>

Solution

Entfernen Sie die unnötigen PackageReference.

Szenario 2

PackageReference-Microsoft. Extensions.Caching.Memory wird nicht gekürzt. Dieses Paket ist automatisch verfügbar und muss nicht explizit referenziert werden. Entfernen des PackageReference-Elements

Issue

Die Liste der Pakete, die zum Löschen verwendet werden, wird durch die direkten FrameworkReference Elemente des aktuellen Projekts bestimmt. FrameworkReference Elemente sind transitiv. Wenn das aktuelle Projekt jedoch einen Frameworkverweis über eine ProjectReference, pruning erbt, wird dieser transitive Frameworkverweis nicht zum Entfernen von Paketen verwendet. Beachten Sie, dass dieses Paket durch die Lösung von Buildzeitkonflikten entfernt wird.

Example

In diesem Beispiel verweisen Library.csproj verweise Microsoft.AspNetCore.App und Consumer.csproj verweise Library.csproj. Ohne direktes FrameworkReference In Consumer.csprojkann NuGet nicht bestimmen, dass das Paket nicht möglich ist. Daher wird Microsoft.Extensions.Caching.Memory nicht als nicht im Verbraucherprojekt betrachtet.

  <!-- Library.csproj -->
  <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
      <TargetFramework>net10.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
  </Project>
  <!-- Consumer.csproj -->
  <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
      <TargetFramework>net10.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <ProjectReference Include="..\Library\Library.csproj" />
      <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
    </ItemGroup>
  </Project>

Fügen Sie das FrameworkReference direkt zu Consumer.csproj. NuGet kann dann festlegen, dass Microsoft.Extensions.Caching.Memory vom freigegebenen Framework bereitgestellt wird. Er löst NU1510 für den unnötigen direkten Paketverweis aus.

  <ItemGroup>
    <ProjectReference Include="..\Library\Library.csproj" />
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
  </ItemGroup>

Solution

Fügen Sie den Abgleich FrameworkReference direkt zum aktuellen Projekt hinzu. Entfernen Sie dann die unnötigen PackageReference.

Note

Ab .NET 10 ist das PrunePackageReference Feature standardmäßig für alle Projekte aktiviert, die auf .NET 10 oder höher abzielen. Die Warnung wird nur ausgelöst, wenn die Bereinigung für alle Laufzeitziele gilt:

  <PropertyGroup>
    <!-- 'System.Text.Json' is not SDK-bundled in 'net48' -->
    <TargetFrameworks>net10.0;net48</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <!-- This reference is needed in 'net48' - NU1510 is not raised -->
    <PackageReference Include="System.Text.Json" Version="9.0.7" />
  </ItemGroup>