Библиотека шарписта | C#, F#, .NET, ASP.NET
21.5K subscribers
2.91K photos
46 videos
91 files
5.41K links
Все самое полезное для C#-разработчика в одном канале.

Наши курсы: https://clc.to/y3LDtw

По рекламе: @tproger_sales_bot

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
⚙️ dotnetup устанавливает и обновляет .NET без прав администратора

Microsoft представила dotnetup — менеджер SDK и сред выполнения .NET. Он хранит установки в папке пользователя, поддерживает несколько версий и учитывает закреплённый в проекте SDK через global.json.

После установки инструмента доступны три основные команды:

dotnetup init
dotnetup list
dotnetup update


Первая настраивает окружение и устанавливает актуальный стабильный SDK. Вторая показывает установленные компоненты. Третья обновляет версии в отслеживаемых каналах; точно закреплённые версии остаются на месте.

Инструмент пригодится, если вы ведёте несколько проектов с разными версиями .NET или регулярно проверяете предварительные сборки. Сейчас dotnetup доступен в public preview. Начать удобно с локального окружения macOS или Linux.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤‍🔥1
🧠 Конструктор структуры может оставить fixed-буфер неинициализированным

При оптимизации кода ReSharper класс с массивом заменили на структуру со встроенным fixed-буфером. После этого расчёты начали давать неверный результат. Причиной оказался неинициализированный буфер.

Компилятор исключает fixed-буферы из проверки обязательного присваивания полям. У локальной структуры с пользовательским конструктором такой буфер может содержать данные, оставшиеся в памяти.

Если ваш код рассчитывает на нули, очистите буфер в конструкторе:

fixed (uint* p = data)
{
new Span<uint>(p, maxLength).Clear();
}


Проверьте это при работе с unsafe, нативными библиотеками и собственными структурами для вычислений. На современных целевых платформах также можно рассмотреть InlineArray.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👏1
🔔 Последние дни акции Proglib Academy! Покупаете один курс — второй получаете в подарок. Успейте до 31 октября.

Можно совместить два направления и прокачать навыки сразу в нескольких областях:

⬆️ ИИ для разработчиков — системная работа с ИИ на всех этапах разработки: от планирования задачи до написания кода, тестирования и ревью.

⬆️ Разработка ИИ-агентов — создание собственных агентов для работы с данными, API и внешними сервисами. В программе — RAG, MCP, LangGraph, n8n и тестирование агентов.

Первый курс поможет встроить ИИ в привычный процесс разработки, второй — перейти к созданию собственных интеллектуальных инструментов.

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

Осталось совсем немного времени — акция заканчивается 31 октября!

👉 Подобрать свою пару курсов
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Passkey можно добавить вторым фактором после пароля в ASP.NET Core

Пользователь вводит пароль, затем подтверждает вход через Windows Hello, Touch ID или аппаратный ключ. В разборе на ASP.NET Core Identity показано, как добавить passkey вторым фактором после пароля в .NET 10.

Приложение сохраняет подтверждение парольного шага в отдельной короткоживущей cookie. Затем запрашивает passkey, проверяет подпись и сверяет пользователя с тем, кто ввёл пароль. После успешной проверки завершает вход.

Так можно добавить passkey в существующее приложение с паролями. Потребуются провайдер второго фактора, страница подтверждения и два обработчика: выдача параметров WebAuthn и проверка ответа.

Возьмите пример из статьи. Проверьте привязку обоих шагов к одному пользователю, срок действия cookie и CSRF-защиту обработчиков.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Тестам WinUI 3 нужен UI-диспетчер приложения

Тест создаёт UI-компонент, выполняет await и затем обращается к его свойствам. Чтобы такой сценарий работал, код должен продолжиться в UI-потоке приложения. Одной пометки STA для тестового потока недостаточно.

В руководстве по MSTest для UWP и WinUI 3 показана настройка с MSTest 4.5.1 и Microsoft.Testing.Platform 2.5.1. Атрибут [UITestMethod] позволяет выполнять тест с доступом к настоящему UI-диспетчеру.

При настройке CI проверьте модель приложения: для обычного WinUI-процесса и приложения в MSIX запуск устроен по-разному. На чистом агенте также должны быть нужные компоненты Windows App SDK и разрешения для регистрации пакета.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Durable Task восстанавливает ход процесса после перезапуска воркера

Сервис создаёт окружение клиента: сеть, базу, хранилище. В середине работы воркер перезапускается. Теперь нужно выяснить, что уже создано и с какого шага продолжать.

Durable Task записывает историю оркестрации и результаты завершённых шагов. При восстановлении код оркестратора проходит по этой истории, использует сохранённые результаты и доходит до следующего действия. Так можно выразить ожидание согласования, внешний callback и таймер.

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

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3❤2
👀 Анализаторы Blazor в .NET 11 находят лишние вызовы StateHasChanged

Вызовы StateHasChanged легко добавить по привычке, даже когда Blazor уже планирует обновление компонента. Новые анализаторы помогают находить такие места прямо при разработке.

В ASP.NET Core для .NET 11 также добавлены проверки работы с состоянием аутентификации: ошибки здесь могут оставить интерфейс со старыми сведениями о пользователе. В обзоре изменений есть ссылки на реализации этих проверок.

Если уже тестируете .NET 11 RC, посмотрите новые предупреждения в своём проекте. Для них не требуется переходить на стороннюю библиотеку компонентов: анализаторы входят в инструменты самого фреймворка.

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🖥 После перехода на Xcode 27 MAUI-приложению может понадобиться настройка UIScene

Приложение собирается, устанавливается на iPhone, показывает заставку и закрывается. Если в журнале есть сообщение UIScene life cycle is required for apps built with this SDK, нужно проверить жизненный цикл интерфейса.

В руководстве по миграции разобраны изменения для существующих MAUI-проектов. UIScene управляет окнами приложения и их переходами между активным и фоновым состояниями.

При обновлении сборочного окружения пройдите этот сценарий на устройстве: запуск, сворачивание, возврат и открытие приложения по ссылке.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🖥 Copilot SDK на C# позволяет подключить собственную модель

Приложению с ИИ-агентом нужны обработка запросов, вызовы инструментов и управление ходом работы. Copilot SDK предоставляет такую среду выполнения, а BYOK позволяет направить запросы в собственное развёртывание модели.

В примере на C# показана настройка подключения к Microsoft Foundry или Azure OpenAI.

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

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
🖥 JIT ускоряет виртуальные вызовы, когда узнаёт конкретный тип объекта

Вызов через интерфейс или базовый класс требует определить нужную реализацию метода. Если JIT знает тип объекта, он может вызвать метод напрямую и встроить его код.

В разборе производительности .NET 11 показано, как этому помогают сведения, собранные во время выполнения. Для частого типа создаётся быстрый путь с проверкой.

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

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 BenchmarkDotNet позволяет сравнить один код на двух версиях .NET

Перед обновлением runtime можно измерить важную операцию на текущей и новой версии. BenchmarkDotNet собирает тестовые приложения, выполняет измерения и выводит результаты рядом.

В примерах сравнения .NET 10 и .NET 11 проект настроен сразу на две платформы. Измерения запускают в Release.

Выберите операцию из своего приложения: сериализацию, обработку коллекции или вычисление. Подготовьте одинаковые входные данные и сравните время выполнения и выделение памяти. Для .NET 11 в материале используется предварительная сборка.

➡️ Навигация: Вакансии • Задачи • Собеседования

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👾1