.NET Дайджест #40: уход в отставку руководителя .NET Foundation, отмена и возврат Hot Reload в .NET 6, анонс Visual Studio 2022

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

В выпуске: веб-версия Visual Studio Code, команда ML.NET включит в план работ поддержку NER, новые возможности F# 6, Владимир Зеленский хочет построить дата-центр Azure в Украине, HTTP/3 в ASP.NET, новые возможности linq в .NET 6, SOLID в C#, использование кортежей в C#.

Последние пару месяцев выдались довольно горячими для .NET комьюнити. Помимо грядущего релиза .NET 6, сообщество всколыхнули сразу несколько громких событий.

Критика и уход исполнительного директора .NET Foundation

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

Исполнительный директор .NET Foundation Клэр Новотны подверглась критике за то, что смерджила пулреквест в одном из репозиториев без обсуждения с сообществом. Примечательно, что речь идет о проекте ReactiveUI, в котором Клэр была соавтором еще задолго до того, как заняла свою должность в .NET Foundation. Сам же коммит представлял собой добавление зависимости в виде пакета DotNet.ReproducibleBuilds. Казалось бы, небольшое изменение в проекте стало частью крупной дискуссии вокруг .NET Foundation и того, как менеджмент этой организации взаимодействует с ее участниками.

Через некоторое время Клэр написала письмо, в котором принесла извинения за то, что нарушила правила внесения изменений в исходный код проекта, так также заявила о том, что уходит со своего поста. В свою очередь Шон Вильдермут, член совета директоров .NET Foundation, написал, что совет директоров рассмотрел заявление Клэр и принял его, так что теперь необходимо будет избрать нового исполнительного директора.

Коммит, удаляющий поддержку Hot reload

Второе, не менее громкое событие связанно уже с процессом разработки и подготовки к релизу .NET 6. 20 октября был смерджен пулреквест, удаляющий функциональность hot reload из .NET 6. Чтобы было понятно, о чем речь — функция hot reload позволяет применять изменения в исходном коде на лету, без приостановки приложения. Эта весьма удобная и полезная для отладки возможность была аноснирована Дмитрием Лялиным еще в мае. В своей новой публикации Дмитрий объявил о том, что эта функция будет доступна только для пользователей Visual Studio 2022. Данное решение вызвало обширное обсуждение и протест в сообществе разработчиков.

Решение убрать поддержку hot reload выглядело очень неоднозначно еще и потому, что складывалась ситуация, при которой Visual Studio получала преимущество перед альтернативными инструментами разработки. Об этом свидетельствует например пост Халида Абухакмех, где он пишет в блоге JetBrains о том, что Rider будет иметь поддержку функциональности hot reload, реализованную независимо от функции dotnet-watch, которая на тот момент была исключена из релиза.

К чести команды разработчиков платформы .NET, они довольно быстро признали, что совершили ошибку. Об этом написал в блоге платформы Скотт Хантер. Он принес извинения перед сообществом и поблагодарил за активное обсуждение. 23 октября коммит, удаляющий поддержку hot reload был отключен.

Этот поступок не только вызывает уважение за способность признания собственных ошибок, но и развеивает сомнения отдельных участников сообщества .NET о том, что Microsoft занимает исключительно доминирующую позицию в процессе разработки и не считается с мнение сообщества.

Релиз веб-версии Visual Studio Code

Ну и чтобы несколько разбавить напряженную повестку последних дней, думаю, стоит сказать об однозначно позитивном анонсе, который состоялся совсем недавно — релизе веб-версии Visual Studio Code. Не секрет, что VS Code уже был встроен в разных вариантах уже был встроен как в сервисы самой компании Microsoft в GitHub Codespace, и в Azure App Service Editor, так и в сторонние коммерческие проекты, такие как Gitpod. Теперь же мы видимо полноценный законченный продукт, который поддерживает как интеграцию с GitHub, так и работу с локальными проектами. Также есть возможность установки расширений, правда пока далеко не всех — большая часть расширений пока что поддерживаются только десктопной версией VS Code. Веб-версия Visual Studio может работать на планшетах, что может быть полезно тем, кто поехал в отпуск без ноутбука, и решил немного пописать код.

Напомню также, что совсем скоро состоится запуск .NET 6, это произойдет 9 ноября на трехдневной конференции .NET Conf 2021, сразу после мероприятия Visual Studio 2022 Launch Event, на котором будет представлена новая версия IDE.

Далее предлагаю ознакомиться с другими материалами, которые я подготовил для вас за это время.

.NET

Tutorial: как портировать проект с Interop Word API на Open XML SDK — портирование приложений использующих Interop Word API на Open XML SDK.

String Interpolation in C# 10 and .NET 6 — работа со строками в C#10 и .NET 6.

Using SignalR in your Blazor applications — в этом эпизоде ON .NET Show Дэвид Пайн и Джереми продемонстрируют пример приложения с поддержкой чат-бота, которое работает на Blazor WASM и SignalR.

New .NET 6 APIs driven by the developer community — новые API в .NET 6 и ASP.NET Core.

C# Language Highlights Deconstructing Non-tuple Types — деконструкция типов, не являющихся кортежами.

.NET Core 2.1 container images will be deleted from Docker Hub — Microsoft удаляет образы .NET Core 2.1 из Docker Hub. Это значит, что тем, кто использует эти образы, придется обновить докерфайлы и переписать пути на новые.

ReSharper 2021.2.1 and Rider 2021.2.1 Bug Fixes Are Out — JetBrains подготовили обновления для Rider и ReSharper.

Large Numbers of Bindings With RabbitMQ — исследование на тему того, как ведет себя RabbitMQ при большом количестве биндингов. В статье также есть ссылка на исходный код тестов на C#.

Using the Console Log formatter — в этом выпуске ON .NET Show вы узнаете о новых возможностях логирования в .NET.

.NET locking in an Async Method — пример простого использования лока в асинхронном методе.

File IO improvements in .NET 6 — в .NET 6 FileStream стал намного быстрее и надежнее благодаря тому, что его практически полностью переписали.

Release v2.1.0 · PragmaticFlow/NBomber — вышла новая версия NBomber — инструмента для нагрузочного тестирования с открытым исходным кодом.

Build .NET Search Experiences With Lunr-Core — использование Lunr в качестве альтернативы Elasticsearch.

Multitenancy in ASP.NET Core — Simplest Way to achieve Multitenancy — создание мультитенант систем с использованием ASP.NET Core.

Build Next-Generation Microservices with .NET 5 and gRPC on AWS — команда разработчиков из Amazon подготовила материал о том, как создавать микросервисы используя .NET 5, gRPC и кончено же AWS.

S.O.L.I.D. Principles of Object-Oriented Programming in C# — тот самый SOLID, про который тебя обязательно спросит на собеседовании интервьюер, даже если сам не помнит, что это значит.

C# - Gotchas with switch expression — разбор очень интересного и не очевидного поведения switch expression в C#.

csharplang/LDM-2021-08-30.md at main · dotnet/csharplang — перечень предлагаемых к реализации возможностей C# 11.

NBomber Сluster overview — NBomber Cluster может запускать тесты NBomber распределенным образом. NBomber Cluster доступен в версии Enterprise, включая бесплатный пробный период.

HTTP/3 support in .NET 6 — в .NET 6 будет поддержка HTTP/3.

How To Desktop in 2022 — обзор различных технологий для создания десктопных приложений.

Async processing of long-running tasks in ASP.NET Core — асинхронная обработка длительных задач в ASP.NET Core.

Common web application architectures — основные виды архитектуры веб-приложений.

A look at the upcoming improvements to LINQ in .NET 6 — про нововведения в Linq в .NET 6.

6 Essential Tools to Detect and Fix Performance Issues in .NET — 6 инструментов для диагностики производительности приложений на .NET.

How to Use C#’s Parallel.ForEach — советы по использованию Parallel.ForEach.

Compress Strings With .NET and C# — способы сжатия текста в .NET.

Profiling and Fixing Common Performance Bottlenecks — выявление и устранение узких мест в производительности приложений — запись веб-семинара от JetBrains.

Ahead-Of-Time Compilation for Blazor Wasm — в AOT режиме .NET приложение превращается в чистые WebAssembly бинарники сразу при сборке. В рантайме не происходит никакой интерпретации — код выполняется как обычный WebAssembly-код.

The simplicity of ASP.NET Endpoints — использование библиотеки MediatR и применение паттерна Медиатор для упрощения роутинга в ASP.NET приложении.

4 new useful APIs in .NET 6 — новые возможности ASP.NET в .NET 6.

ReSharper 2021.2.2 and Rider 2021.2.2 bug fixes have landed — JetBrains обновили ReSharper и Rider — исправлены баги, улучшена производительность.

Introducing DevOps-friendly EF Core Migration Bundles — миграции в EF Core используются для создания обновлений схемы базы данных на основе изменений в модели EF. Эти обновления схемы следует применять во время развертывания приложения как часть системы непрерывной интеграции или непрерывного развертывания (CI/CD). Теперь доступен новый способ применения этих обновлений: пакеты миграции. Пакет миграции — это небольшой исполняемый файл, содержащий и миграции, и код, необходимый для применения этих миграций к базе данных.

Querying with ADO.NET and F# — работа с ADO.NET из F#.

What’s new in F# 6 — новые возможности F# 6.

7 awesome improvements for LINQ in .NET 6 — свежее видео про новые возможности linq.

Revert «Remove Hot Reload support from dotnet watch (#22217)» by 3nprob · Pull Request #22262 · dotnet/sdk — нашумевшая история с hot reload получила счастливое завершение — мнение комьюнити было услышано командой разработки.

F# 6 Introduces Resumable Code, Improvements to Pattern Matching and Tooling, and More — новые возможности F# 6.

Top .NET Developer Skills According to Tech Leaders and Experts — какими навыками и знаниями должен обладать хороший .NET-разработчик?

Using Tuples in C# to Initialize Properties in the Constructor and to Deconstruct Your Object — использование кортежей в C#.

Azure

ChaosDB: How we hacked thousands of Azure customers’ databases — история взлома пользователей Cosmos DB.

Java on Azure — Microsoft помогает переносить проекты на legacy-технологиях в облако.

«Secret» Agent Exposes Azure Customers To Unauthorized Code Execution — компания Wiz, которая занимается вопросами безопасности облачных технологий, обнаружила уязвимость в Microsoft Azure. Уязвимость затрагивает виртуальные машины под управлением ОС Linux. Уязвимость под названием OMIGOD содержится в службе OMI (Open Management Interface).

Zelensky meets with Microsoft President — президент Украины Владимир Зеленский во время встречи с руководством корпорации Microsoft в Нью-Йорке в рамках визита в США предложил создать на территории Украины дата-центр облачного сервиса Azure.

Microsoft Announces Azure Functions 4.0 with .NET 6 Support in Preview — компания Microsoft заявила о выпуске Azure Functions 4.0 с поддержкой .NET 6 в предварительной версии.

Tip 228 — Part 1 — Get started with .NET Core on Kubernetes with Azure Dev Spaces — начало работы с .NET Core в Kubernetes и Azure Dev Spaces.

Modeling and Partitioning in Cosmos DB — Марк Браун, главный менеджер программы Azure Cosmos DB, расскажет о партиционировании в Cosmos DB и о том, какие модели данных лучше использовать.

Data science

Quantum-inspired algorithms and the Azure Quantum optimization service — выпуск Azure Friday, в котором вы узнаете, как квантовые алгоритмы имитируют квантовую физику для решения сложных задач оптимизации. Квантовая оптимизация (QIO) использует самые современные алгоритмические методы из квантовой физики и делает эти возможности доступными в Azure на обычном оборудовании.

Data analysis with PyTorch and Windows ML — команда Windows ML подготовила публикацию «Анализ данных с помощью Pytorch и машинного обучения Windows».

VS Code Uses ML to Detect Programming Language, Set Mode — VS Code теперь умеет определять язык программирования, используемый в открытом файле с помощью машинного обучения.

Machine Learning Community Standup — Office Hours & Announcements — запись созвона Machine Learning Community.

Xamarin

How to Migrate Xamarin.Forms Apps to .NET MAUI — как перенести приложение Xamarin.Forms на .NET MAUI.

Visual Studio 2022 for Mac Preview 1 is now available! — вышла первая предварительная версия Visual Studio 2022 for Mac. К финальной версии компания обещает полную поддержку .NET MAUI — на данный момент поддержка этой технологии уже реализована, но в весьма ограниченном виде.

Announcing .NET MAUI Preview 9 — .NET MAUI — это следующий этап в эволюции Xamarin.Forms. На данный момент доступна уже девятая предварительная версия .NET MAUI.

Послесловие

Чтобы не пропустить ничего интересного до выхода следующего выпуска — следите за новостями про
.NET
, Azure и Xamarin в Telegram. Все главные публикации ДОУ читайте здесь. А теперь еще можно читать новости прямо в Slack: devdigest.today/join.


Предыдущие выпуски

👍НравитсяПонравилось10
В избранноеВ избранном4
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Так по всем пунктам Майкрософт исправил ситуацию, не? Мне кажется, что это больше поддув какой-то со стороны хейтеров, уверен, что если копнуть историю всяких икон антагонистов злобному корпоративному Майкрософту, то там и не такие ситуации есть/были.

неа. там много было неясностей с точки зрения вхождения проекта в DotNetFoundation, с точки зрения прав владения. и там есть два варианта — либо проект польностью переходит в DNF и он им владеет, либо DNF помогает с ним. и для многих это было сюрпрпизом. DNF пытается прояснить эти моменты на публичных встречах подобно этой — www.youtube.com/watch?v=zK-_Lq8d1h8

Hot reload у кого-то на своем проекте заработал? У меня в Blazor WASM нивкакую.

Я тоже хотел спросить — Hot reload будет доступен для Xamarin-разработчиков? Или это бекенд-тема большей частью

Для Xamarin також, точніше вже для MAUI на всіх платформах і в новій студії.

А что на счет Xamarin.Native (или во что его там переименуют)?

Тепер це .NET for ios та .NET for Android. Для них також доступний. Hot Reload доступний для усії платформи .NET 6. VS, VS for Mac, VS code

Hot Reload доступний для усії платформи .NET 6

Не вводите в заблуждение нарид))
Для классики он тоже доступен, например для 4.6.1. Правда проверял только под vs 2022.

Обмежена працездатність під вінду з VS 2022 для UWP, WPF. Є таке, але це не те саме, що повноцінна підтримка в .NET 6. Тим більше мова йшла про Xamarin

В общем пока данная фишка нигде норм не работает, а худо-бедно в VS 2022 c .NET 6 с кучей нюансов? Можно пока оставить в покое.

Обмежена працездатність під вінду з VS 2022 для UWP, WPF.

Что-то не заметил ограничений, кроме изменения интерфейсов, но оно и логично (и вряд-ли будет вообще где-то и как-то реализовано)

Спасибо большое за дайджест, почитал с интересом

Недавно наконец-то попробовал Rider, давно собирался но все не доходили руки.
Слышал хвалебные отзывы, но останавливало что придется переучивать все шорткаты, которым пользуюсь в вижуал студии и таким образом потеряю в продуктивности. Но опасения были напрасны — при установке райдера можно импортировать настройки из вижуал студии.
В итоге жалею только о том, что не попробовал его раньше. Убрал ярлыки на VS и уже вторую неделю ей вообще не пользуюсь.

В мене схожа історія була, мене колега переконав, і я спробував.Я за 2 дні зрозумів, наскільки більше особисто мені підходить Rider

Поскольку мне иногда приходится ревьювить и править код на разных языках, то я поставил во всех IDE от JetBrains одинаковую, классическую комбинацию клавиш. Уже практически переучился и привык. И уже стал гораздо эффективнее работать.

Поставил себе в студии плагин vsvim и теперь хоткеи как в vim, удобство навигации по коду выросло в разы и многие хоткеи от ms не пришлось учить.

Давно переехал на вим плаг везде

Можно пару примеров полезностей от vim?

Думаю, тут речь имеет скорее о привычном способе взаимодействия с текстом. Человек уже умеет работать с vim и ему удобно использовать выработанные рефлексы. Я вот в таком окружении скорее всего вообще не смогу работать и все время буду тупить. А вот тем, кто с vim’а начинал — очень даже удобно.

VIM — насколько мне понятно это специализированное средство работы с удалёнными терминалами, при очень низкой скорости соединения 300 бод. Даже при скорости в 10 раз выше, я так понимаю суть теряется.
Но в наше время со StartLink, это даже на арктической станции врядли нужно.

Мы видимо про разные vim говорим. Думаю тут имеется ввиду консольный текстовый редактор vim www.vim.org

Vim — the ubiquitous text editor
Vim is a highly configurable text editor built to make creating and changing any kind of text very efficient. It is included as „vi” with most UNIX systems and with Apple OS X.

Vim is rock stable and is continuously being developed to become even better. Among its features are:

persistent, multi-level undo tree
extensive plugin system
support for hundreds of programming languages and file formats
powerful search and replace
integrates with many tools

Та нормальний опис

Скорее даже лучше по этой ссылке ходить. На сайте vim’a вообще не понятно, что такое vim :) en.wikipedia.org/wiki/Vim_(text_editor

ru.wikipedia.org/wiki/Vi

ну вот если посмотреть секцию частых операций:
например:
J — склеить две строки
2dw — удаляет два слова

5dd — для удаления 5ти строк

Почему я говорю про 300 бод модемы.
VI был клиент-серверным приложением, насколько я понимаю.
Нажатия на клавиатуре передавались командами на сервер, а твой курсор жил там.
Создатель подумал, а если я запишу скрипты на сервере и вообще буду иметь набор команд, которые будут делать много всего — типа «удалить слово».
Тоесть если у тебя слово — «doh» и его надо удалить, ты шлёшь 1 команду вместо 3 команд клавиши «delete».
Но 300 бод скорости давно в прошлом.

Нажатия на клавиатуре передавались командами на сервер, а твой курсор жил там.

Так працює SSH навіть зараз.

ты шлёшь 1 команду вместо 3 команд клавиши "delete"

Но ведь и сейчас разрабочик нажмет Ctrl+Delete для удаления слова и Shift+Delete для удаления строки. Или это у меня привычка со времен лагающей VS?

Все мои шорт-каты из студий:
Ctrl+F и Ctrl+Shift+F
Ctrl+T
Ctrl+[+S

VS Code в ts
Shift + Alt + F
Shift + Alt + O

Alt для мультикурсоров, при том вариант из VS мне больше нравиться.

Ну и
Ctrl + стрелка иногда
Ctrl+S + Ctrl-C / Ctrl-V :)
Shift-Home, Shift-End

Всё что мне надо)

UPD:
Забыл для билда и дебага еще.
Ctrl-Shift-B,
F10, F11
Выделение слова двойным нажатием мыши)

А остальное — это правя кнопка мыши или меню? Можно чуток эффективнее, но это дискуссия уровня слепой печати.

Ctrl+[+S

да, без этого в студии не выжить :)

VIM — насколько мне понятно это специализированное средство работы с удалёнными терминалами, при очень низкой скорости соединения 300 бод. Даже при скорости в 10 раз выше, я так понимаю суть теряется.
Но в наше время со StartLink, это даже на арктической станции врядли нужно.

Можно поинтересоваться, с какой целью вы пытаетесь гейткипить текстовые редакторы?

* vim есть почти везде, даже в git utils для винды, потому на разных системах не надо учить новые редакторы и их хоткеи.
* vim открывается в разы быстрее чем ide.
* намного быстрее, переключатся между бранчами из git-a из bash-консоли или wsl-консоли(т.е. ide после переключения пытаются загружать открытые файлы, релоадить проекты, что может быть очень долго), и если изменений не много, прям в консоле в vim-е подправить что надо, иногда это просто merge сообщение без конфликтов или редактирование какого-то json или readme.md файла.
* быстрая навигация по тексту без мышки. `5dd` для удаления 5ти строк или `dw` для удаления слова клацнуть проще чем отрывать руку с клавиатуры на мышку и обратно.

На SO сложно написано, можно проще: нажать `ctrl+v`, выделить редактируемый текст, нажать `shift+i`, отредактировать текст и нажать `Esc`.
Или выделить текст и применить регулярку.
vim рассчитан на то что он будет работать даже в системе где нет графической оболочки, потому тут действия которые легче выполнить с мышкой — выполняются сложнее.

Навігація уніфікована між всіма IDE. Не треба вивчати різні комбінації клавіш.

ну вот я тоже немного пользуюсь Idea, и там все по-другому, поэтому и останавливало. Хотя шорткаты похожи на те, которые в свое время были у продуктов Borland (F7,F8,F9, Ctrl+F9, Ctrl+F5, Alt+F7, Ctrl+B, Alt+Left, Alt+Right и т.д.).

Моя продуктивность значительно выше, чем у коллег, кто сидит под vs без решарпера.
Но тут недавно патриоты говорили, что установив продукт от jetbrains вы помогаете в гибридной войне оккупантам

Да когда украинцы в принципе электричеством пользуются они тоже помогают в гибридной войне оккупантам.

Да, отказ от использования продуктов JetBrains несомненно сильно поможет украинскому делу.
Ниже цитата из Завгороднего с сокращениями:

«Найбільш очікуваний камбек десятиліття: гурт Би-2 їде до Києва!»

«Баста у Харкові! 17 грудня о 20:00 Баста дасть великий концерт у Палаці Спорту, Харків.»

Ой что делается.
Надо что-то предпринять.
Давайте, что ли, похуесосим блогера Завгороднего за то, что он пишет на русском.

Меня переехать на Rider сподвигла его способность сносно переваривать большие солюшены. В то время как VS, видимо из-за устаревшей архитектуры, мало того что работала медленнее, так ещё и была склонна к фризам UI на неопределённое время.

В VS 2022 это по идее уже пофиксили — мой коллега поставил бету и не нарадуется на скорость работы. Правда я уже сильно привык к райдеру и вряд ли с него перейду обратно на VS

Задача будет еще сложнее для тех, кто переехал на мак или линух за это время 🙂

В итоге жалею только о том, что не попробовал его раньше

да, тут действительно есть о чем жалеть

Если интересно попробовать .NET 6, то dotnetfiddle.net/aVFCuy уже поддерживает .NET 6 rc2 (выбор в Compiler поле)

Подписаться на комментарии