NuGet 警告 NU1510

シナリオ 1

PackageReference System.Text.Json は排除されません。 このパッケージは自動的に使用でき、明示的に参照する必要はありません。 PackageReference 項目を削除する

Issue

この警告は、NuGet 依存関係グラフの排除の結果として発生し、ダイレクト PackageReferenceが原因で、それ以外の場合は排除可能なパッケージが復元されたことを示します。 対象の .NET SDK は同じバージョン以上のアセンブリを提供するため、直接 PackageReference が削除された場合は、名前付きパッケージを排除できます。

この警告は、 PrunePackageReference 機能を使用して排除するために登録されたパッケージにのみ影響します。 問題のPackageReference場合にのみ発生します。

例 1

対象となる .NET SDK に同等のバージョンが含まれている場合、 依存関係の競合解決 によって 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>

例 2

ターゲットの .NET SDK に複数のフレームワーク ターゲットの同等のバージョンが含まれている場合、 依存関係の競合解決 では、ターゲットごとに適切な 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

不要な PackageReferenceを削除します。

シナリオ 2

PackageReference Microsoft。Extensions.Caching.Memory は排除されません。 このパッケージは自動的に使用でき、明示的に参照する必要はありません。 PackageReference 項目を削除する

Issue

排除に使用されるパッケージの一覧は、現在のプロジェクトの直接 FrameworkReference 項目によって決まります。 FrameworkReference 項目は推移的です。 ただし、現在のプロジェクトが ProjectReferenceを通じてフレームワーク参照を継承する場合、排除では、その推移的なフレームワーク参照を使用してパッケージを削除しません。 このパッケージはビルド時の競合解決によって削除されることに注意してください。

Example

この例では、Library.csproj 参照は Microsoft.AspNetCore.AppConsumer.csproj 参照は Library.csproj です。 Consumer.csprojに直接FrameworkReferenceがないと、NuGet はパッケージが排除可能であると判断できません。 その結果、Microsoft.Extensions.Caching.Memory はコンシューマー プロジェクトでは排除可能とは見なされません。

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

Consumer.csprojFrameworkReferenceを直接追加します。 NuGet は、Microsoft.Extensions.Caching.Memoryが共有フレームワークによって提供されていることを確認できます。 不要な直接パッケージ参照に対して NU1510 が発生します。

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

Solution

一致する FrameworkReference を現在のプロジェクトに直接追加します。 その後、不要な PackageReferenceを削除します。

Note

.NET 10 以降では、.NET 10 以降を対象とするすべてのプロジェクトに対して、 PrunePackageReference 機能が既定で有効になっています。 この警告は、排除がすべてのランタイム ターゲットに適用される場合にのみ発生します。

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