Новые возможности .NET 7

.NET 7 является преемником .NET 6 и фокусируется на том, чтобы быть унифицированным, современным, простым и быстрым. .NET 7 будет поддерживаться в течение 18 месяцев как выпуск стандартной поддержки (STS) (ранее известный как текущийвыпуск).

В этой статье перечислены новые возможности .NET 7 и ссылки на более подробные сведения о каждом из них.

Чтобы найти все статьи .NET, обновленные для .NET 7, см . в документации по .NET: новые возможности выпуска .NET 7.

Производительность

Производительность — это ключевой фокус .NET 7, и все его функции разработаны с учетом производительности. Кроме того, .NET 7 включает следующие улучшения, направленные исключительно на производительность:

  • Замена на стеке (OSR) является дополнением к многоуровневой компиляции. Это позволяет среде выполнения изменять код, выполняемый текущим методом в середине его выполнения (то есть в стеке). Длительные методы могут переключаться на более оптимизированные версии в середине выполнения.
  • Теперь с OSR работает управляемый профилированием (PGO) и проще включить (добавив <TieredPGO>true</TieredPGO> в файл проекта). PGO также может инструментировать и оптимизировать дополнительные вещи, такие как делегаты.
  • Улучшено создание кода для Arm64.
  • Собственный 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 позволяет сопоставить с помощью подхода, который позволяет избежать обратного отслеживания и гарантирует линейное время обработки в длину входных данных. Подсистема без обратного отслеживания не может использоваться в поиске справа налево и имеет несколько других ограничений, но быстро для всех регулярных выражений и входных данных. Дополнительные сведения см. в режиме nonbacktracking.

  • Генераторы источников регулярных выражений являются новыми. Генераторы источников создают подсистему, оптимизированную для шаблона во время компиляции, обеспечивая преимущества производительности пропускной способности. Источник, который выдается, является частью проекта, поэтому его можно просматривать и отлаживать. Кроме того, новые оповещения о диагностике SYSLIB1045 генератора источников, которые можно Regex преобразовать в генератор источника. Дополнительные сведения см. в разделе генераторов источников регулярных выражений .NET.

  • Для поиска без учета регистра .NET 7 включает большие преимущества производительности. Преимущества приходят, так как указание RegexOptions.IgnoreCase больше не вызывает ToLower каждого символа в шаблоне и для каждого символа во входных данных. Вместо этого все операции, связанные с регистром, выполняются при Regex построении.

  • Regex теперь поддерживает диапазоны для некоторых API. В рамках этой поддержки добавлены следующие новые методы:

Дополнительные сведения об этих и других улучшениях см . в статье об улучшениях регулярных выражений в записи блога .NET 7 .

Библиотеки .NET

В API библиотеки .NET было внесено много улучшений. Некоторые из них упоминание в других выделенных разделах этой статьи. Некоторые другие приведены в следующей таблице.

Description Программные интерфейсы Дополнительные сведения
Поддержка микросекунд и наносекунд в TimeSpan, TimeOnlyи DateTimeDateTimeOffset типах - 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, , TimeOnlyInt128и UInt128Half 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. Среди этих улучшений:

Дополнительные сведения см. в записи блога .NET 7 (предварительная версия 4 ).

Пакет SDK для .NET

Пакет SDK для .NET 7 улучшает интерфейс командной строки. Она также позволяет публиковать контейнеры и централизованное управление пакетами с помощью NuGet.

Шаблоны

Некоторые улучшения приветствия были сделаны в команде dotnet new и в разработку шаблонов.

dotnet new

Команда dotnet new CLI, которая создает новый проект, файл конфигурации или решение на основе шаблона, теперь поддерживает завершение вкладки для изучения:

  • Доступные имена шаблонов
  • Параметры шаблонов
  • Допустимые значения параметров

Кроме того, для повышения соответствия, installuninstalllistsearchподкомандам и update субкомандам больше не имеют -- префикса.

Разработка

Ограничения шаблонов, новая концепция для .NET 7, позволяют определить контекст, в котором разрешены шаблоны. Ограничения помогают обработчику шаблонов определить шаблоны, которые должны отображаться в таких dotnet new listкомандах. Вы можете ограничить шаблон операционной системой, узел ядра шаблонов (например, диалоговое окно .NET CLI или Создать проект в Visual Studio) и установленную рабочую нагрузку. Ограничения определяются в файле конфигурации шаблона.

Кроме того, в файле конфигурации шаблона теперь можно аномировать параметр шаблона, разрешая несколько значений. Например, web шаблон позволяет использовать несколько форм проверки подлинности.

Дополнительные сведения см. в записи блога .NET 7 (предварительная версия 6 ).

Публикация в контейнере

Контейнеры являются одним из самых простых способов распространения и запуска различных приложений и служб в облаке. Образы контейнеров теперь являются поддерживаемым типом выходных данных пакета SDK для .NET, и вы можете создавать контейнерные версии приложений с помощью dotnet publish. Дополнительные сведения о функции см. в статье Объявление о поддержке встроенного контейнера для пакета SDK для .NET. Руководство по контейнеризации приложения .NET с помощью dotnet publish.

Централизованное управление пакетами

Теперь вы можете управлять общими зависимостями в проектах из одного расположения с помощью функции централизованного управления пакетами NuGet (CPM). Чтобы включить его, добавьте файл Directory.Packages.props в корневой каталог репозитория. В этом файле задайте свойство ManagePackageVersionsCentrallytrue MSBuild и добавьте версии для распространенных зависимостей пакета с помощью PackageVersion элементов. Затем в отдельных файлах проекта можно опустить Version атрибуты из любых элементов PackageReference , ссылающихся на централизованно управляемые пакеты.

Дополнительные сведения см. в разделе "Централизованное управление пакетами".

Создание источника P/Invoke

.NET 7 представляет генератор источников для вызовов платформ (P/Invokes) в C#. Генератор источника ищет LibraryImportAttributestaticpartial методы для активации создания исходного кода маршаллинга во время компиляции. Создавая код маршаллинга во время компиляции, заглушка 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 Multi-Platform App UI (.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".

См. также