.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 для успешной десериализации. Дополнительные сведения см. в разделе Обязательные свойства.
.NET 7 и C# 11 включают инновации, которые позволяют выполнять математические операции универсально, то есть не зная точного типа, с которым вы работаете. Например, если вы хотите написать метод, добавляющий два числа, раньше вам приходилось добавлять перегрузку метода для каждого типа. Теперь вы можете написать единый универсальный метод, в котором параметр типа ограничен типом, похожим на числовой. Дополнительные сведения см. в статье универсальная математика и в записи блога универсальная математика.
Регулярные выражения
Библиотека регулярных выражений .NET претерпела значительные улучшения в функциональности и производительности в .NET 7:
Новая опция RegexOptions.NonBacktracking позволяет выполнять сопоставление с использованием подхода, исключающего обратное отслеживание и гарантирующего линейное время обработки относительно длины входных данных. Подсистема без обратного отслеживания не может использоваться в поиске, выполняемом справа налево, и имеет несколько других ограничений, но работает быстро для всех регулярных выражений и входных данных. Дополнительные сведения см. в режиме без возврата .
Генераторы источников регулярных выражений являются новыми. Генераторы кода создают модуль, оптимизированный для вашего шаблона во время компиляции, обеспечивая преимущества производительности. Источник, который выдается, является частью проекта, поэтому его можно просматривать и отлаживать. Кроме того, новая диагностика генератора источников SYSLIB1045 предупреждает вас о местах использования Regex, которые можно преобразовать для использования с генератором источников. Дополнительные сведения см. в генераторах исходного кода регулярных выражений .NET.
Для поиска без учета регистра .NET 7 включает значительные улучшения производительности. Полученные выгоды обусловлены тем, что указание RegexOptions.IgnoreCase перестает вызывать ToLower для каждого символа в шаблоне и каждого символа во входных данных. Вместо этого все операции, связанные с регистром, выполняются при построении Regex.
Regex теперь поддерживает диапазоны для некоторых API. В рамках этой поддержки добавлены следующие новые методы:
Дополнительные сведения об этих и других улучшениях см. в записи блога о повышении эффективности регулярных выражений в .NET 7 .
Библиотеки .NET
В API библиотеки .NET было внесено много улучшений. Некоторые из них упоминаются в других выделенных разделах этой статьи. Некоторые другие приведены в следующей таблице.
Эти API-интерфейсы означают, что вы больше не должны выполнять вычисления по значению "tick", чтобы определить микросекундные и наносекундированные значения. Дополнительные сведения см. в записи блога .NET 7 ( предварительная версия 4).
API для чтения, записи, архивации и извлечения архивов Tar
Stream.Read может возвращать меньше данных, чем доступно в потоке. Новые методы ReadExactly считывают точно количество запрошенных байтов, а новые методы ReadAtLeast считывают по крайней мере количество запрошенных байтов. Дополнительные сведения см. в записи блога .NET 7(предварительная версия 5).
Новые преобразователи типов для DateOnly, TimeOnly, Int128, UInt128и Half
Преобразователи типов часто используются для преобразования типов значений в строку и из нее. Эти новые API добавляют преобразователи типов для типов, добавленных в последнее время.
GetCurrentStatistics() позволяет использовать счетчики событий или API метрик для отслеживания статистики для одного или нескольких кэшей памяти. Дополнительные сведения см. в записи блога .NET 7 (предварительная версия 4).
API для получения и задания разрешений на доступ к файлам Unix
Приложения JavaScript могут использовать расширенную поддержку WebAssembly в .NET 7 для повторного использования библиотек .NET из JavaScript. Дополнительную информацию см. в Использование .NET в любом приложении JavaScript в .NET 7.
Наблюдаемость
.NET 7 вносит улучшения в наблюдаемость. Наблюдаемость помогает понять состояние приложения по мере масштабирования и по мере увеличения технической сложности. Реализация наблюдаемости .NET в основном построена вокруг OpenTelemetry. К усовершенствованиям относятся:
Новое событие Activity.CurrentChanged, которое можно использовать для отслеживания изменений в контексте управляемого потока.
Пакет 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 позволяет использовать несколько форм проверки подлинности.
Контейнеры являются одним из самых простых способов распространения и запуска различных приложений и служб в облаке. Образы контейнеров теперь являются поддерживаемым типом выходных данных пакета SDK для .NET, и вы можете создавать контейнерные версии приложений с помощью dotnet publish. Дополнительные сведения о функции см. в объявлении о встроенной поддержке контейнера для .NET SDK. Руководство см. в статье Containerize a .NET app with dotnet publish.
Централизованное управление пакетами
Теперь вы можете управлять общими зависимостями в проектах из одного расположения с помощью функции централизованного управления пакетами NuGet (CPM). Чтобы включить его, вы добавите файл Directory.Packages.props в корневой каталог репозитория. В этом файле задайте свойству MSBuild ManagePackageVersionsCentrallytrue и добавьте версии для распространенных зависимостей пакетов с помощью элементов PackageVersion. Затем в отдельных файлах проекта можно опустить атрибуты Version в элементах PackageReference, которые ссылаются на централизованно управляемые пакеты.
.NET 7 представляет генератор источников для вызовов платформ (P/Invokes) в C#. Генератор исходного кода ищет LibraryImportAttribute в static, чтобы инициировать создание маршаллингового кода методами partial на этапе компиляции. Создавая код маршаллинга во время компиляции, заглушка IL не должна создаваться во время выполнения, так как она выполняется при использовании DllImportAttribute. Генератор кода повышает производительность приложения, а также позволяет скомпилировать приложение заранее (AOT). Дополнительные сведения см. в статье генерация исходного кода для вызовов платформы и использование пользовательских маршаллеров в исходно-сгенерированных P/Invokes.
Связанные релизы
В этом разделе содержатся сведения о связанных продуктах, которые имеют выпуски, совпадающие с выпуском .NET 7.
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. Усовершенствования были сделаны в следующих областях:
WPF в .NET 7 включает множество исправлений ошибок, а также улучшения производительности и специальных возможностей. Дополнительные сведения см. в статье Новые возможности WPF в записи блога .NET 7.
Orleans
Orleans — это кроссплатформенная платформа для создания надежных масштабируемых распределенных приложений. Сведения о последних обновлениях для Orleansсм. в разделе Миграция с Orleans 3.x на 7.0.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Из этого модуля вы узнаете, в каких случаях, с какой целью и каким образом следует модернизировать приложение ASP.NET Framework до ASP.NET Core с помощью помощника по обновлению.
Продемонстрировать основные понятия ИИ, связанные с разработкой программного обеспечения и служб Microsoft Azure для создания решений искусственного интеллекта.