C# Portal | Программирование
13.9K subscribers
1.15K photos
126 videos
29 files
928 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Сотрудничество, реклама: @devmangx

Менеджер: @Spiral_Yuri

РКН: https://clck.ru/3FocB6
Download Telegram
EF Core 9 наконец упрощает сидинг данных.

С UseSeeding и UseAsyncSeeding теперь можно загружать начальные данные прямо из DbContext.

Меньше ручного кода и гораздо более чистая настройка.

Вот код с изображения:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=SeedingEfCore")
.UseAsyncSeeding(async (context, _, cancellationToken) =>
{
if (!await context.Set<Category>().AnyAsync(cancellationToken))
{
await context.Set<Category>().AddRangeAsync(
new Category { Name = "Backend" },
cancellationToken
);

await context.SaveChangesAsync(cancellationToken);
}
});
}


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾1
C# 15 добавляет union-типы: закрытые наборы вариантов (case types), исчерпывающее pattern matching, неявные преобразования и даже поддержку кастомных union-типов без boxing.

Это серьёзное улучшение удобства для API, которые возвращают «один из нескольких вариантов».

Полный пост: https://devblogs.microsoft.com/dotnet/csharp-15-union-types/

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🍾52🔥1
Выпущен JavaScript-движок Okojo для .NET.

В бенчмарках он более чем в 3 раза быстрее, чем Jint, при этом с низкими аллокациями!

В комплекте расширения: встраивание Wasm, reflection, генерация биндингов с d.ts, runtime, совместимый с Node, отладчик VSCode и многое другое.

За исключением некоторых частей (прямой eval / with и т.д.), базовая реализация проходит test262 почти на 100%!

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

https://github.com/akeit0/okojo

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🍾21
В .NET 10 формат .slnx стал дефолтным не просто так. Старый формат .sln был разработан в начале 2000-х, когда Visual Studio была единственным инструментом. Он никогда не предназначался для работы с Git.

35 строк с GUID’ами для 3 проектов? Конфликты при мердже каждый раз, когда кто-то добавляет проект? Проприетарный формат, который нельзя валидировать стандартными инструментами?

Формат .slnx решает всё это. 7 строк чистого XML. Без GUID’ов. Git автоматически мерджит добавления проектов. Поддерживается всеми IDE.

«Но у меня уже есть проекты…»

Одна команда: dotnet sln migrate

И всё. Старый .sln остаётся нетронутым, пока ты не проверишь результат. Риск буквально нулевой.

Реальный риск — продолжать использовать старый формат и идти против экосистемы, которая движется вперёд.

Согласен или нет?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍5💯21🍾1
Aspire 13.2 тихо завёз суперсилу: теперь твой терминал может читать документацию за тебя.

aspire docs list        → всё
aspire docs search redis → результаты с ранжированием по релевантности
aspire docs get <slug> → полная страница, без браузера


https://buff.ly/RFUftBI

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🍾1
Мы Создали Слой Кэша. PostgreSQL Показал, что Зря.

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

Что было дальше 🤙

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍2🍾2👎1
DataAnnotations против FluentValidation

1️⃣DataAnnotations тоже позволяют валидировать данные с проверкой в базе через кастомный атрибут + IUserRepository.

2️⃣Но когда правило разрастается, FluentValidation обычно оказывается чище, слабее связан с остальным кодом и проще покрывается тестами.

#dotnet #csharp

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🍾1
Хватит жонглировать разрозненными инструментами для JSON. 🧱

JSON-everything — это высокопроизводительный, соответствующий стандартам набор инструментов для Schema, Patch, Path и других задач — всё в рамках одной экосистемы .NET. Открытый исходный код, ориентирован на современные сценарии разработки.

https://hubs.li/Q04bsKZy0

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
4🍾1
Забирай мой подход для упрощения управления потоками:

(начиная с .NET 9)

Вместо классического System.Threading.Monitor в .NET 9 появился новый тип — System.Threading.Lock.

Вместе с ним появился метод Lock.EnterScope(), который создаёт эксклюзивную область и автоматически освобождает блокировку после выхода из блока кода.

Этот тип даёт более удобную синхронизацию потоков через свой API.

Оператор lock в C# умеет распознавать, когда целью блокировки выступает объект Lock.

В таком случае он использует новый API, а не классический механизм.

Смотри код ниже.

Что думаешь про это нововведение?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4🤣32👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Cleanpilot — современная альтернатива CCleaner, написанная на C# / WinUI 3, полностью работающая на основе winapp2.ini

Публичная превью-версия уже доступна : https://github.com/builtbybel/Cleanpilot/

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🍾2
Большинство .NET-разработчиков в 2026 всё ещё копируют строки подключения между файлами appsettings.json.

В прошлом месяце у меня было 4 сервиса в одном решении. У каждого — своя строка подключения к PostgreSQL. Логирование настроено по-разному. Проверки состояния были только в двух.

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

В этот момент я перенёс всё на .NET Aspire.

➡️Строки подключения? Определяются один раз в AppHost. Подставляются во все сервисы автоматически.
➡️Логирование? Настраивается один раз в ServiceDefaults. Применяется ко всем сервисам.
➡️Проверки состояния? Встроены. WaitFor() управляет порядком запуска.
➡️Наблюдаемость? Трейсы, метрики и структурированные логи через OpenTelemetry. Без дополнительной стоимости.

«Но Aspire только для Azure». Нет. Я деплою в AWS. Aspire управляет локальной разработкой. Облачная платформа отвечает за продакшн. Это разные зоны ответственности.

«Но это добавляет сложность». Сложнее, чем поддерживать 5 разных конфигураций логирования для 5 сервисов? Сложнее, чем ловить рассинхронизацию строк подключения ночью?

Настоящая сложность — это связующий код, который вы пишете сейчас. Aspire его убирает.

Моё правило: 2+ сервиса с общей инфраструктурой — использовать Aspire. Меньше — можно обойтись без него.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
6👏3
Agent Framework 1.0 вышел — стабильные интерфейсы, мультиагентные воркфлоу, MCP, хостинг через Foundry, декларативные агенты на YAML и графовый движок для полноценной оркестрации.

Если вы делаете агентов на .NET или Python, этот релиз стоит сохранить в закладки.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👏4
Наш слон: собрал полноценный движок инференса LLM на C#/.NET 10. С нуля. 🐘

Не обёртка — нативная загрузка GGUF, токенизатор BPE, механизм внимания, KV-кэш, SIMD-векторизованные CPU-ядра, CUDA-бэкенд для GPU, API, совместимый с OpenAI.

Один разработчик, ~2 месяца, с использованием ИИ (без вайбкодинга). Первый превью-релиз уже доступен.

Подробнее: https://kokosa.dev/blog/2026/dotllm/ и https://dotllm.dev/

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥135👏3👍1
C#-приложения с файловой моделью и поддержкой нескольких файлов — кому-то нужно? Появится в .NET 10.0.300 и будущих превью .NET 11

@dotnet

https://github.com/DamianEdwards/runfile/compare/main...include-directive

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
.NET 11 Preview 3 приносит обновления для dotnet run и развитие поддержки объединённых типов

— Улучшения поддержки объединённых типов в средах разработки (полифилы всё ещё требуются)

—`dotnet run -e` (встроенные переменные окружения)

— Файловые приложения → поддержка нескольких файлов (#:include)

— Улучшения dotnet watch с интеграцией Aspire

и другое...

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾1
.NET 11 Preview 3 приносит важное обновление в EF Core:

Теперь можно выполнять запросы к JSON в SQL Server напрямую из LINQ

Раньше: ручной SQL + JSON_VALUE
Теперь: JsonContains

Меньше кода, чище и проще сопровождать.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103😁3🍾3🤔1
.NET 10 включает dnx — по сути аналог npx для .NET.

dnx NuGet.Mcp.Server --yes


Скачивает и запускает локальный MCP-сервер. Установка не требуется.

Работает с MCP-серверами для NuGet, Azure, Bicep, Power Platform. Добавляешь в mcp.json — и готово.

Тихое, но важное изменение для AI-инструментария.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🍾2
CQRS ≠ MediatR.

Перестаньте смешивать CQRS и MediatR.

То, что вы используете MediatR, не означает, что у вас реализован CQRS.

CQRS — это про разделение операций чтения и записи, часто с разными моделями, стратегиями хранения и иногда с разными хранилищами данных.

MediatR — это библиотека для диспетчеризации сообщений внутри процесса. Она удобна для организации команд и запросов, но это не фреймворк CQRS.

Можно использовать MediatR в архитектуре, построенной по CQRS.

Но не стоит считать, что одно автоматически означает другое.

Сначала разберитесь в различии, прежде чем внедрять паттерн или инструмент.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🍾1
Два списания одновременно с одного и того же банковского счёта — что может пойти не так?

Если плохо управлять конкурентным доступом, последствия могут быть критичными:
-» дублирующиеся списания
-» потеря денег 💸

Начиная с .NET 9, используйте Lock и контролируйте конкурентный доступ.
#dotnet #csharp

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10🥴4👎2🍾1
В EF Core методы Add() и AddAsync() не выполняют вставку в БД.

Они лишь помечают сущность как новую для последующей вставки.

Сам INSERT происходит при вызове SaveChanges() или SaveChangesAsync().

AddAsync() имеет смысл только в специфичных кейсах, например с HiLo, когда EF Core может получить идентификатор до сохранения.

#dotnet #efcore

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🍾2