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. 직접 FrameworkReference 실행하지 않으면 NuGet에서 Consumer.csproj패키지를 정리할 수 있는지 확인할 수 없습니다. 따라서 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>

FrameworkReference 직접 추가합니다 Consumer.csproj. 그런 다음 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>