Некоторые пакеты Microsoft.Extensions, включённые в общий фреймворк

Чтобы уменьшить размер приложения, упростить зависимости пакетов и упростить обслуживание, .NET 11 включает девять библиотек Microsoft.Extensions.* в базовой общей платформе. Проекты, которые явно ссылались на эти пакеты, получают предупреждение о сборке NU1510. Вы можете устранить предупреждение, удалив PackageReference. Если вы зависите от более старой версии этих пакетов, обновление до версии .NET 11 может привести к критическим изменениям, введенным между старыми версиями и .NET 11.

Представленная версия

.NET 11 предварительная версия 4

Предыдущее поведение

Ранее следующие библиотеки Microsoft.Extensions.* не были частью общей платформы .NET. (Общий фреймворк предоставляется при использовании Sdk="Microsoft.NET.Sdk" или, аналогичным образом, при ссылке на любой из других пакетов SDK .NET.) Для проектов, которым они были нужны, требовались явные элементы PackageReference, а процесс сборки копировал сборки в выходную папку:

Новое поведение

Начиная с .NET 11, эти девять библиотек являются частью базовой общей платформы .NET:

  • Для этих библиотек вам не нужен PackageReference, если вы ориентируетесь на net11.0 или более позднюю версию.
  • Если вы ссылаетесь на эти пакеты явно, вы получите предупреждение о сборке NU1510.
  • Эти сборки больше не копируются в выходную папку.
  • В редких случаях дополнительные API в наборе загрузки по умолчанию могут вызвать конфликты имен или типов. Чтобы устранить конфликт, добавьте более явные using директивы, используйте псевдоним или используйте полное имя типа.

Тип разрушающего изменения

Это изменение поведения.

Причина изменения

В том числе эти часто используемые библиотеки в общей платформе снижают размер приложения, упрощают зависимости пакетов и упрощают обслуживание.

Удалите любой затронутый PackageReference пакет:

Для проектов, ориентированных только на net11.0 и более поздние версии, полностью удалите PackageReference:

<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />

Код продолжает работать без изменений— API теперь являются частью среды выполнения.

Для многоцеловых проектов (например, NU1510) не вызывается, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>так как пакет по-прежнему требуется для более старой платформы TFM. Никаких действий не требуется. NuGet автоматически выбирает соответствующую сборку для каждой целевой платформы. Если вы хотите быть явным, можно условно включить ссылку:

<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />

Устранение конфликтов имён на этапе компиляции (редко):

Если возникла ошибка компиляции, так как имя в коде конфликтует с одним из недавно включенных API, используйте один из следующих подходов:

  • Добавьте более конкретную using директиву.
  • using Используйте псевдоним.
  • Используйте полное имя типа.

Если вы зависите от более старой версии этих пакетов:

Чтобы избежать сбоев во время выполнения, таких как MissingMethodException или TypeLoadException, перекомпилируйте все зависимые библиотеки или исполняемые файлы, используя эталонные сборки .NET 11. Если вы используете net11.0, удалите PackageReference и пересоберите. Если вы используете более ранние TFM или ориентируетесь на несколько целевых платформ, обновите ссылки на пакеты для целевых платформ, отличных от net11.0, до текущей версии, а затем перекомпилируйте.

При обновлении до .NET 11 версий этих пакетов могут возникнуть следующие критические изменения предыдущих версий:

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Затронутые API

Нет.