Новые возможности .NET 7
.NET 7 является преемником .NET 6 и ориентирован на единство, современность, простоту и быстроту . .NET 7 будет поддерживается в течение 18 месяцев в качестве стандартного выпуска поддержки (STS) (ранее известного как текущий выпуск).
В этой статье перечислены новые возможности .NET 7 и ссылки на более подробные сведения о каждом из них.
Производительность
Производительность — это ключевой фокус .NET 7, и все его функции разработаны с учетом производительности. Кроме того, .NET 7 включает следующие улучшения, направленные исключительно на производительность:
- Замена на стеке (OSR) дополняет многоуровневую компиляцию. Это позволяет среде выполнения изменять код, выполняемый текущим методом в середине его выполнения (то есть в стеке). Длительные методы могут переключаться на более оптимизированные версии в середине выполнения.
- Профильная оптимизация (PGO) теперь работает с OSR и её проще включить (добавив
<TieredPGO>true</TieredPGO>
в файл проекта). PGO также может собирать данные и оптимизировать дополнительные элементы, такие как делегаты. - Улучшено создание кода для Arm64.
- Native AOT создает автономный исполняемый файл в формате файла целевой платформы без внешних зависимостей. Он полностью нативный, без IL или JIT, и обеспечивает быстрый запуск и небольшое самостоятельное развертывание. В .NET 7 нативный AOT фокусируется на консольных приложениях и требует, чтобы приложения были сокращены.
- Улучшения производительности среды выполнения Mono, которая обеспечивает работу приложений Blazor WebAssembly, Android и iOS.
Для получения подробных сведений о многих функциях, ориентированных на производительность, которые делают .NET 7 таким быстрым, см. запись блога Улучшения производительности в .NET 7.
Сериализация System.Text.Json
.NET 7 включает улучшения сериализации System.Text.Json в следующих областях:
- настройка контракта дает вам больше контроля над тем, как типы сериализуются и десериализуются. Дополнительные сведения см. в разделе Настройка контракта JSON.
- Полиморфная сериализация для иерархий типов, определяемых пользователем. Дополнительные сведения см. в разделе сериализации свойств производных классов.
- Поддержка необходимых элементов , которые являются свойствами, которые должны присутствовать в полезных данных JSON для успешной десериализации. Дополнительные сведения см. в разделе Обязательные свойства.
Дополнительные сведения об этих и других обновлениях см. в новых возможностях System.Text.Json в записи блога .NET 7.
Универсальная математика
.NET 7 и C# 11 включают инновации, которые позволяют выполнять математические операции универсально, то есть не зная точного типа, с которым вы работаете. Например, если вы хотите написать метод, добавляющий два числа, раньше вам приходилось добавлять перегрузку метода для каждого типа. Теперь вы можете написать единый универсальный метод, в котором параметр типа ограничен типом, похожим на числовой. Дополнительные сведения см. в статье универсальная математика и в записи блога универсальная математика.
Регулярные выражения
Библиотека регулярных выражений .NET претерпела значительные улучшения в функциональности и производительности в .NET 7:
Новая опция RegexOptions.NonBacktracking позволяет выполнять сопоставление с использованием подхода, исключающего обратное отслеживание и гарантирующего линейное время обработки относительно длины входных данных. Подсистема без обратного отслеживания не может использоваться в поиске, выполняемом справа налево, и имеет несколько других ограничений, но работает быстро для всех регулярных выражений и входных данных. Дополнительные сведения см. в режиме без возврата .
Генераторы источников регулярных выражений являются новыми. Генераторы кода создают модуль, оптимизированный для вашего шаблона во время компиляции, обеспечивая преимущества производительности. Источник, который выдается, является частью проекта, поэтому его можно просматривать и отлаживать. Кроме того, новая диагностика генератора источников
SYSLIB1045
предупреждает вас о местах использования Regex, которые можно преобразовать для использования с генератором источников. Дополнительные сведения см. в генераторах исходного кода регулярных выражений .NET.Для поиска без учета регистра .NET 7 включает значительные улучшения производительности. Полученные выгоды обусловлены тем, что указание RegexOptions.IgnoreCase перестает вызывать ToLower для каждого символа в шаблоне и каждого символа во входных данных. Вместо этого все операции, связанные с регистром, выполняются при построении Regex.
Regex теперь поддерживает диапазоны для некоторых API. В рамках этой поддержки добавлены следующие новые методы:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (и несколько других перегрузок)
Дополнительные сведения об этих и других улучшениях см. в записи блога о повышении эффективности регулярных выражений в .NET 7 .
Библиотеки .NET
В API библиотеки .NET было внесено много улучшений. Некоторые из них упоминаются в других выделенных разделах этой статьи. Некоторые другие приведены в следующей таблице.
Описание | API | Дополнительные сведения |
---|---|---|
Поддержка микросекунд и наносекунд в типах TimeSpan, TimeOnly, DateTimeи DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) — Новые перегрузки конструктора DateTime - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) — Новые перегрузки конструктора DateTimeOffset - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - И другие... |
Эти API-интерфейсы означают, что вы больше не должны выполнять вычисления по значению "tick", чтобы определить микросекундные и наносекундированные значения. Дополнительные сведения см. в записи блога .NET 7 ( предварительная версия 4). |
API для чтения, записи, архивации и извлечения архивов Tar | System.Formats.Tar | Дополнительные сведения см. в записях блога .NET 7 (предварительная версия 4) и .NET 7 (предварительная версия 6). |
Ограничение скорости API для защиты ресурса путем сохранения трафика на безопасном уровне | RateLimiter и другие в пакете NuGet System.Threading.RateLimiting | Дополнительные сведения см. в разделе Ограничение скорости для обработчика HTTP в .NET и Объявление об ограничении скорости в .NET. |
API для чтения всех данных из Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read может возвращать меньше данных, чем доступно в потоке. Новые методы ReadExactly считывают точно количество запрошенных байтов, а новые методы ReadAtLeast считывают по крайней мере количество запрошенных байтов. Дополнительные сведения см. в записи блога .NET 7(предварительная версия 5). |
Новые преобразователи типов для DateOnly , TimeOnly , Int128 , UInt128 и Half |
В пространстве имен System.ComponentModel: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Преобразователи типов часто используются для преобразования типов значений в строку и из нее. Эти новые API добавляют преобразователи типов для типов, добавленных в последнее время. |
Поддержка метрик для IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() позволяет использовать счетчики событий или API метрик для отслеживания статистики для одного или нескольких кэшей памяти. Дополнительные сведения см. в записи блога .NET 7 (предварительная версия 4). |
API для получения и задания разрешений на доступ к файлам Unix | перечисление - System.IO.UnixFileMode - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Дополнительные сведения см. в записи блога .NET 7 ( предварительная версия 7). |
Атрибут, указывающий, какой синтаксис ожидается в строке | StringSyntaxAttribute | Например, можно указать, что параметр string ожидает регулярное выражение, указав параметр с [StringSyntax(StringSyntaxAttribute.Regex)] . |
API для взаимодействия с JavaScript при выполнении в браузере или других архитектурах WebAssembly | System.Runtime.InteropServices.JavaScript | Приложения JavaScript могут использовать расширенную поддержку WebAssembly в .NET 7 для повторного использования библиотек .NET из JavaScript. Дополнительную информацию см. в Использование .NET в любом приложении JavaScript в .NET 7. |
Наблюдаемость
.NET 7 вносит улучшения в наблюдаемость. Наблюдаемость помогает понять состояние приложения по мере масштабирования и по мере увеличения технической сложности. Реализация наблюдаемости .NET в основном построена вокруг OpenTelemetry. К усовершенствованиям относятся:
- Новое событие Activity.CurrentChanged, которое можно использовать для отслеживания изменений в контексте управляемого потока.
- Новые методы перечислителя с высокой производительностью для свойств Activity: EnumerateTagObjects(), EnumerateLinks()и EnumerateEvents().
Дополнительные сведения см. в записи блога .NET 7 ( предварительная версия 4).
Пакет SDK для .NET
Пакет SDK для .NET 7 улучшает интерфейс командной строки. Она также позволяет выполнять публикацию в контейнеры и централизованно управлять пакетами с помощью NuGet.
Шаблоны
В команде dotnet new
и создании шаблонов были сделаны значительные улучшения.
dotnet new
Команда cli dotnet new
, которая создает новый проект, файл конфигурации или решение на основе шаблона, теперь поддерживает завершение вкладки для изучения:
- Доступные имена шаблонов
- Параметры шаблона
- Допустимые значения параметров
Кроме того, для повышения соответствия подкоманды install
, uninstall
, search
, list
и update
больше не имеют префикса --
.
Авторство
Ограничения для шаблона , новая концепция в .NET 7, позволяют определить контекст, в котором можно использовать эти шаблоны. Ограничения помогают обработчику шаблонов определить, какие шаблоны должны отображаться в таких командах, как dotnet new list
. Вы можете ограничить шаблон операционной системой, хостом движка шаблонов (например, .NET CLI или диалоговым окном Создать проект в Visual Studio) и установленной нагрузкой. Ограничения определяются в файле конфигурации шаблона.
Кроме того, в файле конфигурации шаблона теперь можно аномировать параметр шаблона, разрешая несколько значений. Например, шаблон web
позволяет использовать несколько форм проверки подлинности.
Дополнительные сведения см. в записи блога .NET 7 Preview 6.
Публикация в контейнере
Контейнеры являются одним из самых простых способов распространения и запуска различных приложений и служб в облаке. Образы контейнеров теперь являются поддерживаемым типом выходных данных пакета SDK для .NET, и вы можете создавать контейнерные версии приложений с помощью dotnet publish
. Дополнительные сведения о функции см. в объявлении о встроенной поддержке контейнера для .NET SDK. Руководство см. в статье Containerize a .NET app with dotnet publish.
Централизованное управление пакетами
Теперь вы можете управлять общими зависимостями в проектах из одного расположения с помощью функции централизованного управления пакетами NuGet (CPM). Чтобы включить его, вы добавите файл Directory.Packages.props в корневой каталог репозитория. В этом файле задайте свойству MSBuild ManagePackageVersionsCentrally
true
и добавьте версии для распространенных зависимостей пакетов с помощью элементов PackageVersion
. Затем в отдельных файлах проекта можно опустить атрибуты Version
в элементах PackageReference, которые ссылаются на централизованно управляемые пакеты.
Дополнительные сведения см. в разделе Централизованное управление пакетами.
Генерация исходного кода P/Invoke
.NET 7 представляет генератор источников для вызовов платформ (P/Invokes) в C#. Генератор исходного кода ищет LibraryImportAttribute в static
, чтобы инициировать создание маршаллингового кода методами partial
на этапе компиляции. Создавая код маршаллинга во время компиляции, заглушка IL не должна создаваться во время выполнения, так как она выполняется при использовании DllImportAttribute. Генератор кода повышает производительность приложения, а также позволяет скомпилировать приложение заранее (AOT). Дополнительные сведения см. в статье генерация исходного кода для вызовов платформы и использование пользовательских маршаллеров в исходно-сгенерированных P/Invokes.
Связанные релизы
В этом разделе содержатся сведения о связанных продуктах, которые имеют выпуски, совпадающие с выпуском .NET 7.
Visual Studio 2022 версии 17.4
Дополнительные сведения см. в статье Новые возможности Visual Studio 2022.
C# 11
C# 11 включает поддержку общей математики, сырых строковых литералов, типов области действия файла и других новых функций. Дополнительные сведения см. в статье Новые возможности C# 11.
F# 7
F# 7 продолжает работу, чтобы упростить язык и повысить производительность и взаимодействие с новыми функциями C#. Дополнительные сведения см. в объявлении F# 7.
.NET MAUI
Мультиплатформенный пользовательский интерфейс приложений .NET (.NET MAUI) — это кроссплатформенная платформа для создания собственных мобильных и классических приложений с помощью C# и XAML. Он объединяет API Android, iOS, macOS и Windows в один API. Сведения о последних обновлениях см. в статье Новые возможности .NET MAUI для .NET 7.
ASP.NET Core
ASP.NET Core 7.0 включает промежуточное программное обеспечение для ограничения скорости, усовершенствования минимальных API и JSON-транскодирование для gRPC. Сведения обо всех обновлениях см. в статье Новые возможности ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 включает независимую от провайдера поддержку столбцов JSON, улучшение производительности при сохранении изменений и пользовательские шаблоны для обратного проектирования. Чтобы получить информацию обо всех обновлениях, смотрите в Что нового в EF Core 7.0.
Windows Forms
Много работы было вложено в Windows Forms для .NET 7. Усовершенствования были сделаны в следующих областях:
- Доступность
- Высокий уровень DPI и масштабирование
- Привязка данных
Дополнительные сведения см. в статье Новые возможности Windows Forms в .NET 7.
WPF
WPF в .NET 7 включает множество исправлений ошибок, а также улучшения производительности и специальных возможностей. Дополнительные сведения см. в статье Новые возможности WPF в записи блога .NET 7.
Orleans
Orleans — это кроссплатформенная платформа для создания надежных масштабируемых распределенных приложений. Сведения о последних обновлениях для Orleansсм. в разделе Миграция с Orleans 3.x на 7.0.
Инструмент обновления .NET и CoreWCF
Помощник по обновлению .NET теперь поддерживает обновление серверных приложений WCF до CoreWCF, который является созданным сообществом портом WCF до .NET (Core). Дополнительные сведения см. в статье Обновление проекта на стороне сервера WCF для использования CoreWCF.
ML.NET
ML.NET теперь включает API классификации текста, который упрощает обучение пользовательских моделей классификации текста с помощью новейших методов глубокого обучения. Для получения дополнительной информации, см. в записях блога Новые возможности AutoML и инструментов и Введение в API классификации текста ML.NET.
См. также
- Примечания к выпуску для .NET 7