Предупреждение NuGet NU1510

Сценарий 1

PackageReference System.Text.Json не будет обрезано. Этот пакет автоматически доступен и не требует явной ссылки. Удаление элемента PackageReference

Issue

Это предупреждение возникает в результате обрезки графа зависимостей NuGet и указывает на то, что в противном случае вырезаемый пакет был восстановлен из-за прямого PackageReference. Именованный пакет можно удалить, если прямой PackageReference удаляется, так как целевой пакет SDK для .NET предоставляет ту же версию или более позднюю версию этой сборки.

Это предупреждение влияет только на пакеты, зарегистрированные для обрезки с помощью функции PrunePackageReference . Возникает только то, когда PackageReference вопрос может быть полностью удален из проекта.

Пример 1

Если целевой пакет SDK для .NET включает эквивалентную версию, разрешение конфликтов зависимостей выбирает сборку, связанную с пакетом 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

Если целевой пакет SDK для .NET включает эквивалентную версию для нескольких целевых объектов платформы, разрешение конфликтов зависимостей выбирает соответствующую сборку, связанную с пакетом 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

Microsoft PackageReference. Extensions.Caching.Memory не будет обрезано. Этот пакет автоматически доступен и не требует явной ссылки. Удаление элемента PackageReference

Issue

Список пакетов, используемых для очистки, определяется прямыми FrameworkReference элементами текущего проекта. FrameworkReference элементы являются транзитивными. Тем не менее, если текущий проект наследует ссылку на платформу с помощью ProjectReferenceочистки, не использует эту транзитивную ссылку на платформу для удаления пакетов. Обратите внимание, что этот пакет будет удален путем разрешения конфликтов во время сборки.

Example

В этом примере Library.csproj ссылается на Microsoft.AspNetCore.App и Consumer.csproj ссылки Library.csproj. Без прямого FrameworkReference входа Consumer.csprojNuGet не может определить, что пакет является обрезаемым. В результате Microsoft.Extensions.Caching.Memory не считается prunable в проекте потребителя.

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

Добавьте непосредственно в FrameworkReferenceConsumer.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 PrunePackageReference функция включена по умолчанию для всех проектов, предназначенных для .NET 10 или более поздней версии. Предупреждение возникает только при применении обрезки ко всем целевым объектам среды выполнения:

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