Upozornění NuGet NU1510

Scénář 1

PackageReference System.Text.Json nebude vyřazen. Tento balíček je automaticky dostupný a není nutné na tento balíček explicitně odkazovat. Odebrání položky PackageReference

Issue

Toto upozornění se vyvolá v důsledku vyřazení grafu závislostí NuGet a indikuje, že se kvůli přímému PackageReferenceobnovení jinak vyřešitelného balíčku obnovil . Pojmenovaný balíček lze vyřadit, pokud je přímý PackageReference odebrán, protože cílová sada .NET SDK poskytuje stejnou verzi nebo vyšší verzi tohoto sestavení.

Toto upozornění má vliv pouze na balíčky zaregistrované k vyřezávání prostřednictvím funkce PrunePackageReference . Je vyvolána pouze tehdy, když PackageReference je možné z projektu zcela odebrat danou otázku.

Příklad 1

Pokud cílová sada .NET SDK obsahuje ekvivalentní verzi, řešení konfliktů závislostí vybere sestavení se sadou SDK:

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

Příklad 2

Pokud cílová sada .NET SDK obsahuje ekvivalentní verzi pro více cílů architektury, řešení konfliktů závislostí vybere pro každý cíl odpovídající sestavení sady SDK:

  <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

Odeberte nepotřebné PackageReference.

Scénář 2

PackageReference Microsoft. Rozšíření.Caching.Memory nebudou vyřazeny. Tento balíček je automaticky dostupný a není nutné na tento balíček explicitně odkazovat. Odebrání položky PackageReference

Issue

Seznam balíčků používaných pro vyřezávání je určen přímými FrameworkReference položkami aktuálního projektu. FrameworkReference položky jsou tranzitivní. Pokud však aktuální projekt dědí odkaz na architekturu prostřednictvím ProjectReferencevyřezávání, nepoužívá tento tranzitivní odkaz na architekturu k odebrání balíčků. Upozorňujeme, že tento balíček bude odebrán řešením konfliktů v čase sestavení.

Příklad

V tomto příkladu Library.csproj odkazuje na Microsoft.AspNetCore.App a Consumer.csproj odkazy Library.csproj. Bez přímého FrameworkReference přístupu Consumer.csprojnemůže NuGet určit, že je balíček vyřízitelný. V důsledku toho se Microsoft.Extensions.Caching.Memory v projektu spotřebitele nepovažuje za vyříznutelné.

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

FrameworkReference Přidat přímo do Consumer.csproj. NuGet pak může určit, že Microsoft.Extensions.Caching.Memory poskytuje sdílená architektura. Vyvolá NU1510 pro nepotřebný přímý odkaz na balíček.

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

Solution

Přidejte odpovídající shodu FrameworkReference přímo k aktuálnímu projektu. Pak odeberte nepotřebné PackageReference.

Note

Počínaje rozhraním .NET 10 PrunePackageReference je funkce ve výchozím nastavení povolená pro všechny projekty, které cílí na .NET 10 nebo vyšší. Upozornění se vyvolá pouze při vyřezávání platí pro všechny cíle modulu runtime:

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