Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы уменьшить размер приложения, упростить зависимости пакетов и упростить обслуживание, .NET 11 включает девять библиотек Microsoft.Extensions.* в базовой общей платформе. Проекты, которые явно ссылались на эти пакеты, получают предупреждение о сборке NU1510. Вы можете устранить предупреждение, удалив PackageReference. Если вы зависите от более старой версии этих пакетов, обновление до версии .NET 11 может привести к критическим изменениям, введенным между старыми версиями и .NET 11.
Представленная версия
.NET 11 предварительная версия 4
Предыдущее поведение
Ранее следующие библиотеки Microsoft.Extensions.* не были частью общей платформы .NET. (Общий фреймворк предоставляется при использовании Sdk="Microsoft.NET.Sdk" или, аналогичным образом, при ссылке на любой из других пакетов SDK .NET.) Для проектов, которым они были нужны, требовались явные элементы PackageReference, а процесс сборки копировал сборки в выходную папку:
- Microsoft.Extensions.Caching.Abstractions
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft. Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Diagnostics.Abstractions
- Microsoft. Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft. Extensions.Primitives
Новое поведение
Начиная с .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
- ActivatorUtilities.CreateInstance ведет себя согласованно
- ActivatorUtilities.CreateInstance требует ненулевого поставщика
- Свойство FromKeyedServicesAttribute.Key допускает значение null
- Служба без ключа, используемая, когда служба с ключом не найдена
- GetKeyedService и GetKeyedServices с AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Необработанные исключения от BackgroundService
- BackgroundService выполняет весь метод ExecuteAsync как задачу
- Вызов IHost.RunAsync и IHost.StopAsync при сбое фоновой службы
Затронутые API
Нет.