ru
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Открыть в Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Больше

📈 Аналитический обзор Telegram-канала Библиотека шарписта | C#, F#, .NET, ASP.NET

Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 21 866 подписчиков, занимая 6 212 место в категории Технологии и приложения и 30 851 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 21 866 подписчиков.

Согласно последним данным от 10 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -87, а за последние 24 часа — -4, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 12.06%. В первые 24 часа после публикации контент обычно набирает 7.04% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 2 638 просмотров. В течение первых суток публикация набирает 1 540 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 8.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, шарписта, навигация, await, string.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Благодаря высокой частоте обновлений (последние данные получены 11 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

21 866
Подписчики
-424 часа
-167 дней
-8730 день
Архив постов
🤑 Мы ждали этого несколько месяцев Что вы будете делать в этот дополнительный выходной? Полная раскайфовка на кровати или жё
🤑 Мы ждали этого несколько месяцев Что вы будете делать в этот дополнительный выходной? Полная раскайфовка на кровати или жёсткий пет-проектинг? 💬 Пишите в комментах 👇 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #entry_point

⚡ AI-агенты в экосистеме .NET: строим надёжный Production в 2026 году Интеграция нейросетей в корпоративные системы требует не только знания API, но и понимания процессов логирования, трассировки и юридической чистоты. Мы полностью обновили курс по AI-агентам, сделав упор на управляемость и архитектурный подход. 📚 В обновлённой программе: — инжиниринг качества: измерение метрик производительности и устранение регрессий; — промышленный RAG: продвинутые подходы к обработке разнородных документов; — human-in-the-loop: встраивание человека в критические узлы принятия решений; — юридические аспекты: детальное руководство по использованию 152-ФЗ. Начните учиться уже сейчас — материалы для предварительной подготовки доступны сразу после регистрации. ⏳ Специальные условия до 28 февраля: — введите промокод Agent для получения скидки 10 000 рублей**; — участвуйте в **акции «3 курса по цене 1» — выберите два любых курса в дополнение к основному. 👉 Получить доступ к курсу и подаркам

🤨 Переходить на .NET 10 или нет .NET 10 вышел в ноябре 2025 года — и это LTS-релиз, то есть Microsoft будет поддерживать его
🤨 Переходить на .NET 10 или нет .NET 10 вышел в ноябре 2025 года — и это LTS-релиз, то есть Microsoft будет поддерживать его несколько лет. Хорошая база для прода. Основные изменения крутятся вокруг трёх вещей: производительность, язык и экосистема. JIT-компилятор стал агрессивнее инлайнить вызовы и оптимизировать аллокации, что на CPU-интенсивных и API-нагруженных сценариях даёт до 5–30% прироста на горячих путях. C# 14 добавил extension members, field-backed properties и ряд мелких улучшений, которые заметно сократят бойлерплейт у авторов библиотек. EF Core тоже стал быстрее на ряде запросов. Если у вас покрытый тестами прод, нормальный CI и необходимость в долгосрочной поддержке — мигрировать стоит. План простой: сначала апгрейдите изолированный сервис или библиотеку, снимите замеры P95/P99 и аллокаций до и после, убедитесь что всё работает — и масштабируйте. Для старта можно использовать официальный инструмент:
dotnet tool install -g upgrade-assistant
upgrade-assistant upgrade MySolution.sln
Он автоматически находит потенциальные проблемы и обновляет .csproj — но слепо доверять ему не стоит, результаты лучше перепроверить вручную. Есть смысл повременить, если критические NuGet-пакеты ещё не выпустили совместимые версии, у команды нет ресурса на полноценный migration sprint, или впереди крупный релиз и незачем добавлять риски. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #garbage_collector

LLM в корпоративном .NET: от хаоса к управляемой архитектуре Бизнес массово требует внедрять ИИ в корпоративные системы. Но базовые боты ломаются о реальные задачи, уходят в бесконечные циклы и нарушают политики безопасности. Мы обновили курс по AI-агентам, сделав упор на enterprise-стандарты 2026 года. Теперь это инженерный гайд по созданию стабильных, измеримых и безопасных систем, которые не страшно пускать в продакшн. Что мы разбираем на курсе: — хардкорный RAG: парсинг кривых корпоративных сканов, таблиц и улучшение поисковых запросов; — оркестрация: маршрутизация, human-in-the-loop для критичных решений и восстановление состояний; — контроль затрат: детальное управление токенами, кэшем и предотвращение перегрузок; — автоматизация: управление браузером и интеграция с legacy-продуктами; — правовой контур: разворачивание решений с соблюдением 152-ФЗ и подготовка документов. Активируйте промокод Agent до 28 февраля и забирайте скидку 10 000 рублей. Используя акцию «3 курса по цене 1», вы можете выбрать ещё два курса в подарок. Построить надёжных AI-агентов

❓ Что не так с кодом В коде спрятан намёк на обновление, которое принёс нам C# 10 версии. Может публичные поля? Или конструкт
Что не так с кодом В коде спрятан намёк на обновление, которое принёс нам C# 10 версии. Может публичные поля? Или конструктор.. Явно что-то связанное со структурой. 👉 Ответ 👈 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #dotnet_challenge

📣 Если C# для вас — это уже не просто язык, а инструмент для построения систем, следующий шаг — научиться проектировать и ра
📣 Если C# для вас — это уже не просто язык, а инструмент для построения систем, следующий шаг — научиться проектировать и разрабатывать так, как это делают сильные команды в продакшене. Курс «C# Developer. Professional» — про Best Practices .NET-разработки и реальную инженерную работу. Вы углубитесь в работу с атрибутами, асинхронность и многопоточность, разберёте паттерны проектирования, работу с SQL и NoSQL, кэширование, CI/CD и тестирование. ❕Программа построена вокруг практики и командной разработки. Вы будете работать в Scrum-команде, проходя весь цикл: от постановки задач до итогового проекта. Преподаватели — практикующие эксперты, программа регулярно обновляется под требования рынка. Это обучение, которое повышает инженерную зрелость и ценность специалиста. ➡️Старт курса - 27 февраля. Курс доступен в рассрочку. Пройдите короткое вступительное тестирование и получите специальные условия на обучение: https://clc.to/bFJJ_g Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

👩‍💻 Гендерный разрыв в IT Женщины в IT получают на 40% меньше мужчин — и первый порыв объяснить это дискриминацией. Но если
👩‍💻 Гендерный разрыв в IT Женщины в IT получают на 40% меньше мужчин — и первый порыв объяснить это дискриминацией. Но если копнуть в данные, картина усложняется. Разрыв формируется ещё в вузе, продолжается в выборе специализации и усиливается декретом. ➡️ Разбираем, где именно ломается воронка 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта

🤩 Regex вместо while-loop Классический паттерн очистки строк, который встречается в приложениях:
while (slug.Contains("  "))
{
    slug = slug.Replace("  ", "");
}
На первый взгляд — читаемо и предсказуемо. На практике — источник проблем под нагрузкой. Строки в .NET иммутабельны. Каждый вызов Replace() — это полная аллокация новой строки, копирование содержимого и выброс старого объекта на съедение GC. При длинных прогонах повторяющихся символов цикл делает это многократно. Сложность — O(n²), давление на GC — ощутимое. Правильная замена — Regex.Replace с квантификатором +:
slug = Regex.Replace(slug, @"-+", "-");
Один проход по строке, одна аллокация результата, линейная сложность.«+» означает одно или более вхождений подряд — именно то, что имелось в виду в цикле, но выражено декларативно. Оптимальный вариант для .NET 8+ — Source-Generated Regex:
public partial class StringNormalizer
{
    [GeneratedRegex(@"-+")]
    private static partial Regex ConsecutiveDashRegex();

    public static string NormalizeSlug(string input)
        => ConsecutiveDashRegex().Replace(input, "-");
}
Атрибут [GeneratedRegex] переносит компиляцию паттерна на этап сборки. В рантайме — никакого парсинга, никаких лишних аллокаций при инициализации, валидация паттерна прямо в IDE. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

👨‍💻 Конец эпохи State Machine Все мы знаем и любим async/await. Но знаете ли вы, что под капотом происходило всё это время?
👨‍💻 Конец эпохи State Machine Все мы знаем и любим async/await. Но знаете ли вы, что под капотом происходило всё это время? Каждый раз когда вы писали async метод — компилятор переписывал его в большой конечный автомат. Вместо вашего чистого кода генерировался struct, реализующий IAsyncStateMachine, с MoveNext(), switch-блоками и кучей вспомогательных полей. Microsoft перенесла управление async из компилятора прямо в рантайм. Теперь компилятор больше не генерирует конечный автомат — он просто помечает метод атрибутом [MethodImpl(MethodImplOptions.Async)] и делает шаг назад. Рантайм сам перехватывает await-точки через AsyncHelpers.Await(...), сохраняет только нужные переменные и возобновляет выполнение когда Task готов. Что это даёт: • Zero allocation в happy path — никакого лишнего боксинга • Читаемые стектрейсы с вашими именами методов, а не MoveNext • Рантайм понимает async-семантику и может оптимизировать цепочки await • Native AOT поддержка из коробки Как включить сейчас:
<Features>$(Features); runtime-async=on</Features>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<TargetFramework>net11.0</TargetFramework>
Это самое крупное изменение в async-инфраструктуре .NET за последние годы. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

📎 Новая фича C# В C# 15 появится возможность передавать аргументы в конструктор или фабричный метод коллекции прямо внутри выражения коллекции — через элемент with(...). Раньше, если нужно было создать List<string> с заданной ёмкостью или HashSet<string> с нестандартным компаратором, приходилось делать это отдельно. Теперь всё пишется в одну строку:
// Задаём начальную ёмкость списка
List<string> names = [with(capacity: values.Length * 2), .. values];

// Передаём компаратор в HashSet
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// В set окажется один элемент — все строки равны при OrdinalIgnoreCase
with(...) должен быть первым элементом в выражении коллекции. Фича полезна там, где важна производительность: можно сразу зарезервировать нужный размер буфера и избежать лишних реаллокаций. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

🧩 API Gateway в .NET API Gateway — это единая точка входа, которая берёт на себя маршрутизацию, аутентификацию, rate limiting и агрегацию запросов. Клиент общается с одним адресом — Gateway сам разбирается, куда слать запрос. Ocelot vs YARP Ocelot — классика жанра. Конфигурируется через JSON, прост в старте:
{
  "Routes": [{
    "UpstreamPathTemplate": "/api/orders/{id}",
    "DownstreamPathTemplate": "/orders/{id}",
    "DownstreamHostAndPorts": [{"Host": "orders-svc", "Port": 80}]
  }]
}
YARP — от Microsoft, более гибкий. Конфигурируется и через JSON, и прямо в коде:
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
Микросервисы не занимаются проверкой токенов — это задача Gateway. Один раз настроите JWT-валидацию:
app.MapReverseProxy(pipeline => {
    pipeline.UseAuthentication();
    pipeline.UseAuthorization();
});
И все сервисы за Gateway уже защищены. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

📈 Подборка вакансий для шарпистов .NET-разработчик — от 250 000 ₽, удалёнка C#/.NET-разработчик — 265 000 ₽, Офис/Гибрид в Екатеринбурге Middle/Senior .NET Developer — до 3 500 $, удалёнка ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs 🐸 Библиотека шарписта

Интегрируем AI в .NET экосистему Бизнес требует внедрения AI, но не в виде игрушки, а как надёжного сервиса. Мы пересобрали к
Интегрируем AI в .NET экосистему Бизнес требует внедрения AI, но не в виде игрушки, а как надёжного сервиса. Мы пересобрали курс «Разработка AI-агентов», сделав упор на промышленные стандарты и архитектуру. В программе: 🔹 От демо к инжинирингу. Управление ресурсами, кэширование, роутинг и контроль затрат (FinOps для AI). 🔹 RAG нового уровня. Пайплайны для работы с «грязными» данными, таблицами и корпоративными базами знаний. 🔹 LangGraph PRO. Управляемые графы состояний, time-travel для отладки и возможность отката действий. 🔹 Юридический контур. Развёртывание решений с учётом 152-ФЗ. Стартуй сейчас! Материалы пре-подготовки доступны сразу. 🎟 Промокод Agent — скидка 10 000 ₽ (до 28 февраля). 👉 Инженерный подход к AI

📎 Парсим HTML в C# FreeSpire.Doc для .NET — профессиональная библиотека для обработки документов. Она позволяет разработчикам на C# читать, анализировать и извлекать HTML-контент с минимальным количеством кода и без внешних зависимостей. Установка через NuGet:
Install-Package FreeSpire.Doc
Необходимые неймспейсы:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;
using System.IO;
using System.Text.RegularExpressions;
Кейс 1. Извлечение текста из HTML-строки Библиотека справляется с обработкой динамически генерируемых HTML-фрагментов, например, контента из фронтенд-редакторов или HTML-строк, возвращаемых API.
string htmlContent = @"
    <html>
    <body>
        <h2>Описание возможностей продукта</h2>
        <p>Этот компонент поддерживает<span style='font-size:14px;'> парсинг HTML</span> и имеет следующие преимущества:</p>
        <ul>
            <li>Кроссплатформенная совместимость .NET</li>
            <li>Не зависит от Office</li>
            <li>Быстрое извлечение текста</li>
        </ul>
    </body>
    </html>
";

Document parseDoc = new Document();
Section section = parseDoc.AddSection();
Paragraph paragraph = section.AddParagraph();

try
{
    // Ключевой метод: загрузка и парсинг HTML
    paragraph.AppendHTML(htmlContent);
    
    // Извлечение чистого текста
    string pureText = parseDoc.GetText();
    
    // Очистка текста от лишних пробелов
    pureText = Regex.Replace(pureText, @"\s+", " ").Trim();
    
    Console.WriteLine("Извлечённый текст:");
    Console.WriteLine(pureText);
}
finally
{
    parseDoc.Dispose();
}
Кейс 2. Извлечение структурированного контента из файла При работе с локально сохранёнными HTML-файлами чаще нужно извлечь конкретные структурированные данные: заголовки, списки, гиперссылки.
string htmlFilePath = "sample.html";

Document parseDoc = new Document();
parseDoc.LoadFromFile(htmlFilePath);

// Извлечение заголовков (h1-h6)
foreach (Section sec in parseDoc.Sections)
{
    foreach (Paragraph para in sec.Paragraphs)
    {
        if (para.GetStyle().Name.StartsWith("Heading"))
        {
            Console.WriteLine(para.Text.Trim());
        }
    }
}

// Извлечение элементов списков
foreach (Section sec in parseDoc.Sections)
{
    foreach (Paragraph para in sec.Paragraphs)
    {
        if (para.ListFormat.ListType != ListType.NoList)
        {
            Console.WriteLine(para.Text.Trim());
        }
    }
}

// Извлечение гиперссылок
foreach (Section sec in parseDoc.Sections)
{
    foreach (Paragraph para in sec.Paragraphs)
    {
        foreach (DocumentObject docObj in para.ChildObjects)
        {
            if (docObj is Field field && field.Type == FieldType.FieldHyperlink)
            {
                string linkText = field.FieldText;
                string linkUrl = field.GetFieldCode().Split('"')[1];
                Console.WriteLine($"Текст: {linkText}, URL: {linkUrl}");
            }
        }
    }
}
Лучшие практики: • Всегда оборачивайте Document в using или вызывайте Dispose() для освобождения ресурсов • Проверяйте существование файлов и обрабатывайте исключения парсинга • Обрабатывайте извлечённый текст с помощью Regex.Replace для нормализации пробелов 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

🤩 Microsoft раскрыла планы по развитию PowerShell и OpenSSH Пока Microsoft работает над устранением болевых точек Windows 11
🤩 Microsoft раскрыла планы по развитию PowerShell и OpenSSH Пока Microsoft работает над устранением болевых точек Windows 11, компания параллельно вкладывается в инструменты для опытных пользователей. PowerShell 7.7 станет центральным обновлением года. Среди ключевых изменений: профили и модули переедут из папки Documents в более подходящее место, появится возможность загружать модули без правки профиля, отложенные уведомления об обновлениях для пакетных менеджеров, поддержка псевдонимов и макросов в стиле Bash, а также собственный MCP-сервер. Windows OpenSSH может получить поддержку аутентификации через EntraID. ➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news

📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #garbage_collector

⚡️ Синхронная коммуникация: HTTP/REST и gRPC Когда мы говорим о взаимодействии между сервисами, первое, что приходит в голову — синхронный вызов. Один сервис спрашивает, другой отвечает. Просто, понятно, привычно. Разберёмся, какие инструменты есть в .NET и когда каждый из них уместен. HTTP/REST — разумный дефолт Большинство проектов начинается именно с REST. Низкий порог входа, понятная отладка через браузер или Postman, огромная экосистема. В .NET для этого используют HttpClient через IHttpClientFactory. Создание нового HttpClient на каждый запрос — классическая ошибка, которая приводит к исчерпанию сокетов под нагрузкой.
builder.Services.AddHttpClient<IOrderService, OrderService>(client =>
{
    client.BaseAddress = new Uri("https://orders-api/");
    client.DefaultRequestHeaders.Add("Accept", "application/json");
    client.Timeout = TimeSpan.FromSeconds(30);
});

public class OrderService(HttpClient client) : IOrderService
{
    public async Task<Order?> GetAsync(Guid id, CancellationToken ct)
    {
        var response = await client.GetAsync($"orders/{id}", ct);
        response.EnsureSuccessStatusCode();
        return await response.Content.ReadFromJsonAsync<Order>(ct);
    }
}
Сразу добавляйте Polly для повторных попыток и circuit breaker. Без этого первый же временный сбой соседнего сервиса положит весь флоу. Когда не стоит использовать: если между сервисами тысячи вызовов в секунду с жёсткими требованиями по latency — смотрите в сторону gRPC. gRPC — когда миллисекунды на счету gRPC работает поверх HTTP/2, использует бинарную сериализацию через Protocol Buffers и генерирует типизированный клиент из .proto-файла. Это означает меньше трафика, меньше CPU на сериализацию и строгий контракт, нарушение которого не скомпилируется.
// orders.proto
service Orders {
  rpc GetOrder (OrderRequest) returns (OrderReply);
}
message OrderRequest { string id = 1; }
message OrderReply   { string id = 1; string status = 2; }

// в сервисе
builder.Services.AddGrpcClient<OrdersClient>(o =>
    o.Address = new Uri("https://orders-grpc-service"));

public class OrderHandler(OrdersClient grpc)
{
    public async Task<OrderReply> Handle(GetOrderQuery q, CancellationToken ct)
        => await grpc.GetOrderAsync(
               new OrderRequest { Id = q.Id.ToString() },
               cancellationToken: ct);
}
Подводный камень: не тащите gRPC туда, где достаточно REST. Если у вас 10 запросов в минуту — вы просто добавите сложность без выигрыша в производительности. Публичный API или фронтенд — REST без вариантов. Internal-сервисы с высокой нагрузкой и строгим контрактом — gRPC. Если сомневаетесь — начните с REST, профилируйте, и переходите на gRPC там, где это реально болит. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

💿 S.M.A.R.T. уже знает, что с вашим диском Диск умирает тихо. Сначала один переназначенный сектор, потом десять, потом в оди
💿 S.M.A.R.T. уже знает, что с вашим диском Диск умирает тихо. Сначала один переназначенный сектор, потом десять, потом в один прекрасный день файлы просто не открываются. Хорошо, если это была музыка. Плохо, если рабочие документы за три года. Как давно вы проверяли свои файловые хранилища? Как раз вышла новая версия CrystalDiskInfo. Ничего революционного — но повод скачать актуальную сборку и наконец запустить её. ➡️ Проверить диск 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #async_news