90% .NET-разработчиков управляют версиями NuGet самым сложным способом. 👊
Секрет работы с NuGet-пакетами в больших .NET-решениях это использовать Central Package Management (CPM).
Вместо того чтобы дублировать номера версий в каждом проекте, вы определяете их один раз в файле Directory.Packages.props.
После этого в проектах указывается только имя пакета — без версии.
Что это даёт
I. Единообразие по всей solution.
II. Одно место для обновления версии пакета.
III. Экономию времени при апгрейде .NET-версии.
Хватит тратить часы на поиски несовпадений версий. Управляйте пакетами централизованно и в одном месте.
P.S. Если в каком-то проекте нужна своя версия, всегда можно переопределить центральную.
👉 @KodBlog
Секрет работы с NuGet-пакетами в больших .NET-решениях это использовать Central Package Management (CPM).
Вместо того чтобы дублировать номера версий в каждом проекте, вы определяете их один раз в файле Directory.Packages.props.
После этого в проектах указывается только имя пакета — без версии.
Что это даёт
I. Единообразие по всей solution.
II. Одно место для обновления версии пакета.
III. Экономию времени при апгрейде .NET-версии.
Хватит тратить часы на поиски несовпадений версий. Управляйте пакетами централизованно и в одном месте.
P.S. Если в каком-то проекте нужна своя версия, всегда можно переопределить центральную.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3
Обновление поддержки .NET STS
Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.
Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.
Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки
Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки.⌨️
https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/
👉 @KodBlog
Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.
Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.
Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки
Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки.
https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Появилось расширение, которое добавляет эффекты из Elden Ring в вашу почту, LeetCode и GitHub
Теперь пулл реквесты ощущаются как битва с боссом🔨
Забираем с GitHub
👉 @KodBlog
Теперь пулл реквесты ощущаются как битва с боссом
Забираем с GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21❤2
У .NET-приложений больше нет оправдания быть нестабильными. Исправить это можно за пару минут.
Начиная с .NET 8, добавлять устойчивость в приложения стало гораздо проще, ведь появился обновлённый API Polly и официальные библиотеки от Microsoft для работы с отказоустойчивостью.
Polly — это библиотека для .NET, которая помогает обрабатывать временные ошибки и строить стратегии устойчивости: повторные попытки, fallback, таймауты, rate limiting и circuit breaker.
Хочешь узнать, как использовать Polly для создания resilience-пайплайнов? Вот статья со всеми деталями: Building Resilient Cloud Applications with .NET
А если ты работаешь с .NET Aspire, большая часть уже преднастроена «из коробки».
👉 @KodBlog
Начиная с .NET 8, добавлять устойчивость в приложения стало гораздо проще, ведь появился обновлённый API Polly и официальные библиотеки от Microsoft для работы с отказоустойчивостью.
Polly — это библиотека для .NET, которая помогает обрабатывать временные ошибки и строить стратегии устойчивости: повторные попытки, fallback, таймауты, rate limiting и circuit breaker.
Хочешь узнать, как использовать Polly для создания resilience-пайплайнов? Вот статья со всеми деталями: Building Resilient Cloud Applications with .NET
А если ты работаешь с .NET Aspire, большая часть уже преднастроена «из коробки».
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Принесли настоящий клад для изучения алгоритмов —> репозиторий awesome-algorithms
Внутри собраны сайты, шпаргалки, книги, курсы и видео, подходящие как для новичков, так и для продвинутых. Полезная теория и разбор сложных задач (всё в одном месте)
👉 @KodBlog
Внутри собраны сайты, шпаргалки, книги, курсы и видео, подходящие как для новичков, так и для продвинутых. Полезная теория и разбор сложных задач (всё в одном месте)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁6👍3
Вопрос для C#
Смотрим на код (слайд 1):
-
- Вы перебираете элементы в цикле
- Используется
Вопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного⌚️
На слайде 2 — правильный ответ.
Причина в том, что
В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
👉 @KodBlog
Смотрим на код (слайд 1):
-
ProductStock не равен null- Вы перебираете элементы в цикле
- Используется
yield return внутри циклаВопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного
На слайде 2 — правильный ответ.
Причина в том, что
yield return не останавливает выполнение цикла.В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍11🔥3😁2
doc_2025-09-19_09-49-11.net-developer-resources.pdf
4.3 MB
Вышел бесплатный PDF с 650+ с отобранными вручную ресурсами для прокачки C#, .NET, ASP.NET Core, EF Core и микросервисов.
В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.
Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.
За это и лайка не жалко🫡
👉 @KodBlog
В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.
Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.
За это и лайка не жалко
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍12😁2
This media is not supported in your browser
VIEW IN TELEGRAM
После сильного падения трафика StackOverflow наконец-то совершил камбэк ❤️
Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.
👉 @KodBlog
Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33❤4👍2
Нужна ли сервисная дискавери и зачем
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
👉 @KodBlog
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io🍔
👉 @KodBlog
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2
Visual Studio 2026 показывает результаты условных операторов (if) прямо в коде во время отладки.
Скоро будет доступно⌨️
👉 @KodBlog
Скоро будет доступно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤40🔥11👏3🕊3
Динамическая сортировка в EF Core
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
👉 @KodBlog
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥2❤1
LLM в .NET проще, чем кажется
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.🙂
Подробнее: тык
👉 @KodBlog
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.
Подробнее: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
Устаревший подход к работе с null в C# выглядит так:
• Возвращать
• Вставлять десятки проверок
• Полагаться на то, что разработчики «просто знают», что может быть
И всё это ради чего?
Хрупкий код, скрытые баги и
Новый путь такой:
• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)
Как начать:
• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию
Писать безопасный, устойчивый к падениям C# код тяжело.
Но искать
👉 @KodBlog
• Возвращать
null из методов и надеяться на лучшее• Вставлять десятки проверок
if (x != null) повсюду• Полагаться на то, что разработчики «просто знают», что может быть
nullableИ всё это ради чего?
Хрупкий код, скрытые баги и
NullReferenceExceptionНовый путь такой:
• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)
Как начать:
• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию
Писать безопасный, устойчивый к падениям C# код тяжело.
Но искать
NullReferenceException в продакшене в 100 раз сложнее.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👎4👍2
Любите ретро-игры и открытый код? На OS Game Clones собрали десятки открытых клонов классических игр. 😎
Теперь можно играть в любимые тайтлы на современных системах, изучать исходники или использовать их как основу для своих проектов. От платформеров до шутеров и градостроительных симуляторов
Всё в свободном доступе и с возможностью модификации.
👉 @KodBlog
Теперь можно играть в любимые тайтлы на современных системах, изучать исходники или использовать их как основу для своих проектов. От платформеров до шутеров и градостроительных симуляторов
Всё в свободном доступе и с возможностью модификации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥4🥰2👍1
Слышали про Refit?
Если нет, позвольте представить.
Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.
Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".
Почему стоит рассмотреть его использование?
- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API
Больше всего мне нравится обертка
Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.🍺
👉 @KodBlog
Если нет, позвольте представить.
Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.
Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".
Почему стоит рассмотреть его использование?
- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API
Больше всего мне нравится обертка
ApiResponse<T>, которая обрабатывает как содержимое, так и метаданные.Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
LeetCode только что добавил AI, который решает задачи за тебя.
Тогда какой, блин, вообще смысл, лол.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍2
Правильный выбор индекса ускорил SQL-запрос в 70 раз.
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
👉 @KodBlog
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Вместо того чтобы:
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
👉 @KodBlog
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
😐7👍2😁2👌2❤1