Net 6 что нового
8 ноября компания Microsoft выпустила финальную версию фреймворка .NET 6.0 с C# 10 и F# 6, а также Visual Studio 2022. .NET 6 ознаменовался значительным увеличением поизводительности по сравнению с предыдущими версиями фреймворка и большим количеством нового функционала. Кроме того, это LTS-версия, которая будет поддерживаться в течении следующих трех лет.
.NET 6.0 представляет унифицированную платформу, которая позволяет создавать десктопные и мобильные и веб-приложения, а также приложения для IoT и облака.
Некоторые основные изменения в этой версии:
- Благодаря внедрению Dynamic Profile-guided Optimization (PGO) удалось повысить производительность. Dynamic PGO базируется на механизме уровневой компиляции Tiered Compilation, которая позволяет произвести на старте быструю базовую компиляцию методов («уровень 0»), а когда метод потребует, произвести его перекомпиляцию с рядом оптимизаций («уровень 1»)
- Полностью переписан API для работы с файлами, в частности, класс FileStream . Это привело к значительному увеличению производительности: увеличилась скорость выполнения и значительно уменьшилось выделение памяти.
- Более быстрая проверка интерфейсов и использование их в преобразованиях типов. По данным Microsoft, производительность увеличилась на 16% – 38%.
- Добавлены генераторы кода для API System.Text.Json , что опять же повысило производительность и уменьшило выделение памяти. Кроме того, JsonSerializer поддерживает IAsyncEnumerable :
using System; using System.Collections.Generic; using System.IO; using System.Text.Json; static async IAsyncEnumerable PrintNumbers(int n) < for (int i = 0; i < n; i++) yield return i; >using Stream stream = Console.OpenStandardOutput(); var data = new < Data = PrintNumbers(3) >; await JsonSerializer.SerializeAsync(stream, data); //
-
Глобальные пространства имен. Достаточно подключить пространство имен в один файл кода с помощью директивы global using , и оно будет доступно во всех файлах проекта.
global using System; global using static System.Console; global using Env = System.Environment;
namespace MyNamespace < class MyClass < . >>
Можно писать
namespace MyNamespace; class MyClass < . >// Not indented
public record struct Person < public string FirstName < get; init; >public string LastName < get; init; >>
var handler = new HttpClientHandler < Proxy = new WebProxy("socks5://127.0.0.1", 9050) >; var httpClient = new HttpClient(handler);
using HostBuilder host = new() .ConfigureHostOptions(o => < o.ShutdownTimeout = TimeSpan.FromMinutes(10); >) .Build(); host.Run();
await using (var scope = provider.CreateAsyncScope()) < var foo = scope.ServiceProvider.GetRequiredService(); >
Enumerable.Range(1, 10).ElementAt(^2); // 9 source.Take(..3) вместо source.Take(3) source.Take(3..) вместо source.Skip(3) source.Take(2..7) вместо source.Take(7).Skip(2) source.Take(^3..) вместо source.TakeLast(3) source.Take(..^3) вместо source.SkipLast(3) source.Take(^7..^3) вместо source.TakeLast(7).SkipLast(3).
Также добавлены новые методы DistinctBy/UnionBy/IntersectBy/ExceptBy/MaxBy/MinBy А в методах FirstOrDefault/LastOrDefault/SingleOrDefault теперь можно установить значение по умолчанию:
Enumerable.Empty().SingleOrDefault(-1); // -1
// очередь из строк, числа устанавливают приоритеты var pq = new PriorityQueue(); // получение элементов очереди pq.Enqueue("A", 3); pq.Enqueue("B", 1); pq.Enqueue("C", 2); pq.Enqueue("D", 3); pq.Dequeue(); // "B" pq.Dequeue(); // "C" pq.Dequeue(); // либо "A", либо "D"
Отмечается, что .NET 6 поддерживается в Visual Studio 2022 и Visual Studio 2022 for Mac. Однако НЕ поддерживается в Visual Studio 2019 и Visual Studio for Mac 8. Кроме того, .NET 6 поддерживается в Visual Studio Code с помощью расширения для C#.
Вопросы с меткой [.net-6]
.NET 6 — следующая LTS (Long Term Support) версия нового .NET после .NET Core 3.1. Вышла в релиз в ноябре 2021 года.
60 вопросов
Конкурсные
Неотвеченные
- Конкурсные 0
- Неотвеченные
- Цитируемые
- Рейтинг
- Неотвеченные (мои метки)
Проблема сериализации в NET6
Не получается сериализовать класс Project через System.Text.Json.Serialization jsonString выдает обратно <>. При этом в Newtonsoft Json все прекрасно работает. Что я делаю не так, как исправить код? .
задан 14 окт в 19:27
67 показов
Не вызывается событие клика
Переписываю тут проект на WinUI3 и столкнулся с некой особенностью, суть которой в том, что если я использую один контрол в другом, то у него перестает работать событие «клика». Более .
задан 30 сен в 2:48
187 показов
Использование миллионов Task-ов приводит к ошибке System.OutOfMemoryException (C#)
У меня есть 6 миллионов небольших (средний размер около 15 байт) файлов, которые мне нужно прочитать и далее обработать с помощью процессора. Я ранее реализовал это с помощью Task.Factory и всё .
задан 23 авг в 13:30
Как собрать 1 файл в exe C# WPF или как его запротектить?
Дело в том, что единственный способ который у меня получился (сделать из большого кол-ва файлов exe) это публикация, но тогда я не могу закинуть на него обфускатор, я уже делал так раньше и его .
задан 12 авг в 23:57
14 показов
Аналогичный по содержанию код выдает 500
Есть работающий запрос, написанный на C#. //GET: api/Mobile/changes/15С/Четверг [HttpGet(«changes/
задан 27 июл в 13:56
96 показов
Изменить порт хостинга в Net 6.0
Не могу сделать банальную вещь- поменять порт при запуске проекта в Net 6.0 в Visual Studio 2022. Раньше это делалось в свойствах проекта, сейчас там нет возможности поменять. Нашел информацию что .
задан 7 июн в 11:10
111 показов
Как исправить ошибку : Could not load file or assembly ‘PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’
Решил протестить основной проект (Net Core 6.0 wpf) создал тест MsTest подключил ссылку к основному проекту написал тест и он выдает ошибку TestAdminAuthorization Источник: UnitTest1.cs строка 139 .
задан 11 мая в 6:03
160 показов
Приложение C#, WPF, .NET 6: Как увеличить размер стека [закрыт]
Я разрабатываю игру на WPF. Но как запускаю приложение, оно зависает и новая оперативная память не выделяется. Я использую .NET 6 и WPF. Я думаю в приложении .NET не хватает памяти стека. Вопрос в том.
задан 3 мая в 3:20
NUnit send TestContext to TestCaseSource
Нужно сделать серию тестов на NUnit, использующих TestCaseSource для обработки нескольких тест-кейсов, генерируемых из файла Markdown с названием, совпадающим с именем тестового метода. Для этого есть .
задан 19 апр в 7:37
Ошибка в подключении БД Mysql к отчету FastReport,как вывести отчет?
private void Button_Click(object sender, RoutedEventArgs e) < try < RegisteredObjects.AddConnection(typeof(MySqlDataConnection)); Report report = new Report(); .
задан 4 апр в 18:08
Передача файла через UDP с помощью Socket
Попытаюсь ввести в курс дела Я пишу 2 программы, 1й это консольный сервер, 2й это приложение WPF. Приложение отправляет запрос сделать скриншот серверу и сервер получив сообщение делает скриншот и .
задан 20 мар в 10:30
Ошибка invalid_request Invalid redirect_uri
Я создал 3 отдельных микросервиса: проект ProductAPI, проект Web(MVC) и приложение Identity. Я использую Duende Identity. В строке RedirectUris = <"https://localhost:44324/signin-oidc">я ."https:>
задан 5 мар в 19:51
38 показов
Как в Net 6 из middleware перенаправить вызов на endpoint?
Проект был написан на Net Core 2.2 и такая конструкция работала: public static void ProcessFileStorageRequest(this HttpRequest request, string path) < path = path.TrimEnd(new[] < '/' >).
задан 5 мар в 6:23
Как правильно использовать Automapper изменив сущность C# .NET
Необходимо правильно намэппить сущность на DTO модель. Суть такая, чо мне нужно сохранять в СУБД с клиента на сервер фото. Я на клиенте кодирую его в строку Base64 и отравляю на сервер. На сервере .
задан 23 фев в 22:24
26 показов
Как зарегистрировать собственный логгер с анонимным параметром в список сервисов ASP.NET приложения?
У меня есть веб приложение на razor pages и кастомный логгер, который записывает сообщение в текстовый файл. public class CustomLogger
задан 15 фев в 8:46
15 30 50 на странице
-
Важное на Мете
Связанные метки
Подписаться на ленту
Лента новых вопросов с меткой [.net-6]
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Обновление .NET 6.0
Похоже, что локдаун не сильно отразился на компании Microsoft. В этом году открылся рог изобилия и на нас посыпались новинки софтверного рынка — это и долгожданная Windows 11, и новая Visual Studio 22, и, конечно же .NET 6.0. В эти, не самые веселые времена, такие новости действительно радуют.
Давайте поговорим о, пожалуй, самой интересной для разработчиков новинке — .NET 6.0. Не успели разработчики перевести свои проекты на NET 5.0, как уже подоспела новая версия. Забегая вперёд отмечу очевидную правду, что версия 6 не является чем-то принципиально новым — это “допиленный” вариант 5-й. Большая часть изменений — это доработанные или переработанные решения из прошлогоднего релиза, но шестая версия получила статус LTS (Long Time Support) — стала версией с долговременной поддержкой. Отныне это будет касаться всех четных версий.
Как вы помните, начиная с .NET 5.0 компания Microsoft решила объединить все свои фреймворки в один, дабы устранить весь этот «зоопарк». То есть пришли к изначальной концепции .NET Framework, только теперь это не монолит, а только выглядит так.
Изменений и добавлений в NET 6.0 достаточно много, и чтобы статья не превратилась в утомительный трактат, предлагаю кратко рассмотреть основные, наиболее интересные:
1. Crossgen2 — Предварительная компиляция
Обновленная утилита Crossgen получила вторую версию. Старая технология предварительной компиляции была, прямо скажем, несовершенной и позволяла только генерировать нативный код только для той платформы, на которой была запущена старая утилита crossgen. Сейчас она позволяет запускать JIT компилятор независимо от платформы применяя разные стратегии и оптимизации в зависимости от ситуации.
2. Profile-Guided Optimization (PGO)
Это оптимизация компилятора для выставления приоритетов компиляции частей программы. Все дело в том, что далеко не все части программы используются в реальной эксплуатации или используются крайне редко. Например, какие-нибудь экзотические ветвления в else if. Так вот программу можно сделать более оптимизированной, если указать компилятору на часто используемые блоки программы. Теперь есть возможность включить анализатор, который при эксплуатации программы определит часто и редко используемые участки, а также составит профиль оптимизации. Предусмотрено три сценария этой оптимизации:
- Статический — в котором код разделяется на часто и редко используемый (hot-cold splitting). В этом случае профиль оптимизации составляется лишь единожды. При изменении условий эксплуатации программы придется составлять его заново для переоптимизации. При этом подходе наиболее часто используемые части программы компилируются и помещаются в исполняемом файле рядом. Это позволит загружать его очень быстро, благодаря использованию кэша. Крайне редко используемый код вообще не компилируется. При необходимости он будет скомпилирован уже в процессе выполнения программы.
- Динамический подход, где предварительный профиль оптимизации не составляется. Анализатор следит за исполнением программы во время реальной эксплуатации и перекомпилирует участки кода в случае необходимости оптимизации.
- Смешанный подход говорит сам за себя. Тут конечно же используются оба подхода. То есть программа оптимизируется изначально по профилю оптимизации. Затем, в ходе эксплуатации она корректируется по динамической схеме.
3. Hot reload
Эта фича особенно вас порадует. Наконец отладка приложений сильно упрощается! Теперь вы можете запустить отладку один раз и править код «на живую». Если вы когда-нибудь отлаживали javascript в своих .NET Core проектах, то вы поймете принцип сразу.
Наверняка вы помните такую штуку, как «Изменить и продолжить». И раньше у нас была возможность изменить код во время выполнения, но работало это не очень удобно. Приходилось ставить брейкпоинты и приложение вставало на паузу. Брейкпоинт обязательно должен быть установлен до момента, который предполагается исправлять. Да и возможности по изменению были весьма ограничены.
Теперь мы можем исправить код прямо при выполнении программы во время отладки. Затем сохранить изменения и увидеть их в реальном времени. Это значительно ускоряет отладку программ, особенно если вы знаете что и где нужно исправлять и хотите сразу увидеть результат без перезапуска отладки. И да, теперь это работает и в VS Code. Список доступных изменений не велик и доступен по ссылке.
4. .NET MAUI
В рамках глобализации, то есть объединения всех фреймворков в один, Microsoft добавляет в .NET 6 поддержку Xamarin. Теперь нам доступна разработка под macOS, iOS и Android в VisualStudio. Однако в стандартном SDK это не заработает. Потребуется установка дополнительного Optional SDK Workloads. На самом деле разработка становится все удобнее. Создать проект на Android — дело одной команды:
dotnet new android
От названия Xamarin решили отказаться и теперь нам представили Multi-platform App UI или сокращенно MAUI.
5. Minimal API Framework
Нельзя обойти стороной такой интересный инструмент как Minimal API. Этот фреймворк позволяет обходиться минимальным кодом для создания и доступа к веб-методам. Не нужно создавать всю эту MVC обвязку, настраивать заголовки контроллеров и методов, чтобы выстроить роутинг. Более того, Setup.cs тоже больше не нужен. Достаточно лишь Program.cs в котором вы сразу можете создавать веб-методы с роутингом.
app.MapGet("/", (Funcstring>)(() => "Hello World!"));
Неименованная функция вернет «Hello World!» на любой запрос. Это именно то, что так нужно для микросервисов или прототипирования.
6. Поддерживаемые операционные системы
Microsoft опубликовали список всех поддерживаемых ОС, а именно:
- Windows — Windows Client, Windows 10 Client, Windows 11, Windows Server, Windows Server Core, Nano Server;
- MacOS;
- Linux — Alpine Linux, CentOS, Debian, Fedora, openSUSE, Red Hat Enterprise Linux, SUSE Enterprise Linux (SLES), Ubuntu;
- Мобильные — Android и iOS.
7. Поддержка архитектуры ARM64
Поддержка ARM64 появилась еще в NET 5 для Windows. В шестой же версии она расширилась на процессоры ARM64 Apple.
8. Поддержка десктоп приложений Blazor
Несмотря на то, что Blazor это фреймворк для браузерных приложений, Microsoft решил сломать шаблон и дать возможность создавать десктоп приложения. Видимо Blazor доказал свою состоятельность.
9. Оптимизация MSBuild
Перевели Razor-компилятор на Roslyn Source Generators, что значительно ускорило сборку. Roslyn Source Generators появился еще в NET 5 и наделал много “шума” благодаря возможности генерировать код C # на лету во время разработки.
10. LINQ
Наш любимый LINQ тоже не оставили без внимания. В каждом выпуске .NET стараются добавить что-то новое в этот язык (особенно в .NET 5) и этот релиз не стал исключением. В LINQ за последние несколько лет улучшили производительность, а также уменьшили дублирование кода. Вот небольшой список полезных «фишек»:
- Функция TryGetNonEnumeratedCount позволяет определить количество элементов в последовательности, не перебирая их, тем самым значительно ускоряя работу программу в некоторых случаях;
- Функция Chunk разбивает элементы последовательности на заданное количество групп;
- Функции MaxBy и MinBy позволяют найти максимальный или минимальный элемент по заданному ключевому селектору;
- Функции DistinctBy, ExceptBy, IntersectBy и UnionBy также позволяют выполнять действия по ключевому селектору;
- Функции ElementAt и ElementAtOrDefault возвращают элемент по индексу с разницей в виде возврата значения по умолчанию;
- Функция FirstOrDefault наконец-то обзавелась возможностью задавать значение по умолчанию. Так сказать, “ваши мольбы были услышаны”, ведь не всех устраивал null;
- Функция Max научилась принимать компаратор для сравнения значений;
- Функция Take теперь позволяет задавать диапазон.
11. JSON
Ну, и как же без доработок библиотеки System.Text.JSON. Основные изменения коснулись сериализатора. А именно:
- Игнорирование цикличных ссылок;
- Добавился объект IAsyncEnumerable, который превращается в массив;
- Десериализация документа-массива, где появился метод DeserializeAsyncEnumerable.
- Поддержка source generators — технология сериализации без рефлексии, что значительно ускоряет и удешевляет работу программы;
- Добавили новые интерфейсы IJsonOnDeserialized, IJsonOnDeserializing, IJsonOnSerialized, IJsonOnSerializing, которые содержат одноименные обработчики событий. То есть можно выполнять какой-либо код во время сериализации/десериализации;
- С помощью атрибута JsonPropertyOrder можно задавать порядок сериазации полей;
- Десериализация из потока;
Также очень интересная «фича» — поддержка работы с JSON документом как с DOM. Эта особенность довольно полезна, поскольку часто просто не хочется плодить POCO-объекты для простых операций. Не стоит забывать, что DOM-подход к работе с JSON как бы то не было ведёт к снижению производительности и перерасходу ресурсов. Нас заверяют, что такого не произойдет, но насколько это правда — узнаем на практике.
12. HTTP/3
Протокол обмена данными HTTP существует, наверное, уже вечность. Все прекрасно знают, что он основан на другом протоколе TCP, который существует еще дольше. Да, бурное развитие интернета поставило http в затруднительное положение — на фоне роста пропускных способностей сетей он выглядит слабым звеном. И вот, наконец, до нас дошла третья версия этого замечательного протокола, которая хоть и не сняла проблемы, но существенно понизила их градус.
Новый протокол QUIC, который сменил TCP, работает быстрее в случае потери пакетов. Он быстрее при установке соединения. Он позволяет передавать данные параллельно. И он изначально безопасный благодаря шифрованию запросов.
13. Приоритет очереди
Появился новый класс — очередь с приоритетом PriorityQueue. Он позволяет задавать приоритет по каждому добавленному элементу и создает очередь приоритетов. Изымаются эти элементы, начиная с меньшего приоритета.
14. Дата/Время
С датой тоже поработали. Из наиболее интересных изменений:
- Появилось два новых метода System.DateOnly и System.TimeOnly, которые позволяют работать непосредственно с датой или временем, а не DateTime, как раньше.
- Конвертация часовых поясов. То есть теперь при определении пояса с помощью метода TimeZoneInfo.FindSystemTimeZoneById можно использовать идентификатор Windows или IANA. Если при поиске идентификатор пояса одного типа найден не будет, то время автоматически преобразуется в другой формат, соответствующий второму типу идентификатора.
15. Поддержка C# 10
О новых возможностях 10-й версии нужно писать отдельную статью. Поэтому даже не буду упоминать тут самое интересное. Пока что вы можете ознакомиться с этим списком изменений.
Давайте подведём небольшие итоги — что же нам предлагает .NET 6:
- Производительность — действительно, благодаря различным оптимизационным фичам платформа .NET 6 очень быстрая, особенно, если говорить о веб-части.
- Универсальность — единая платформа для создания любых приложений для различных платформ. Многие восприняли эту идею положительно. Порог вхождения в разработку сильно сокращается, да и просто удобно. Но и скептиков хватает. Все мы знаем, что универсальное, как правило, хуже специального.
Мы, конечно, же протестировали наши продукты на совместимость с новым фреймворком. FastReport работает на .NET 6 также прекрасно, как и на 5 версии.
От себя можем добавить, что на наш взгляд, вектор консолидации платформ, языков и технологий правильный. Да, технические знания у молодого поколения снижаются, но они уже и не нужны. Также как коробка автомат вытесняет механическую. Людям нужно просто ездить и не задумываться о передачах и оборотах двигателя. Также и многим современным разработчикам не хочется разбираться в технических тонкостях реализации тех или иных процессов. Теперь они могут заниматься только творческим процессом разработки.
Состоялся официальный релиз Visual Studio 2022 и .NET 6
Microsoft объявила о выходе стабильных версий Visual Studio 2022 и .NET 6, а значит уже сейчас разработчики могут скачать инструменты с официального сайта и начать их применять в своих проектах.
Visual Studio 2022 стала 64-разрядной версией, благодаря чему среда разработки сможет лучше использовать доступные системные ресурсы, особенно при длительной работе над сложными решениями. По данным Microsoft, пользователи предварительной версии IDE на протяжении нескольких дней могли без проблем работать над решениями, содержащими более 700 проектов.
Кроме этого, Visual Studio 2022 приносит с собой поддержку «горячей перезагрузки» (Hot Reload), которая позволяет разработчикам редактировать исходный код, применять изменения и наблюдать за результатами в запущенном приложении. Также поддерживается функция Live Preview и кросс-платформенное тестирование в Linux. Подробности об изменениях можно найти в примечаниях к выпуску на сайте Microsoft. Скачать Visual Studio 2022 v17.0 можно по этой ссылке.
Что же касается .NET 6, то он также стал доступен для Windows, Linux и macOS. Microsoft заявляет, что .NET 6 представляет собой единую платформу для облачных, настольных, IoT и мобильных приложений, так как используются одни и те же библиотеки .NET. Кстати, в новой версии улучшили производительность, особенно по части файлового ввода-вывода.
.NET 6 включает в себя обновлённые инструменты компилятора и множество новых API. Заявлена поддержка C# 10 и F# 6. Более того, это первая версия .NET, поддерживающая компиляцию для процессоров Apple Silicon. .NET 6 будет поддерживаться в течение трёх лет.
Ещё в 2019 году Microsoft объявила, что .NET 5 станет первым крупным продуктом на пути к унификации .NET. В .NET 6 Microsoft завершила Mono и Core, благодаря чему получился единый набор базовых библиотек для всех рабочих нагрузок. Однако .NET MAUI в релизную версию всё же не вошёл. Ожидается, что работа над ним будет завершена лишь к началу второго квартала 2022 года.
Если Вы хотите купить решения Microsoft, обращайтесь к нашим специалистам +380 (44) 383 4410 или sales@softico.ua