Вы ищете заказы там, где их ищут все. А локальный бизнес даже не знает о существовании биржи — ИП пишут в чатах «посоветуйте программиста» или листают Авито.
Будьте там, где нет толпы.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Плавающие окна в Visual Studio
Если вы работаете с несколькими мониторами, вы наверняка отрывали Solution Explorer или окно отладчика на второй экран. Это удобно, но поведение плавающих окон по умолчанию бывает раздражающим: они не отображаются отдельными кнопками в панели задач Windows, сворачиваются вместе с основным окном IDE и всегда остаются поверх остальных окон.
В Visual Studio есть настройка, которая это меняет.
Где найти
Там есть выпадающий список «These floating windows are owned by the main window» с тремя вариантами:
•
•
•
Двойной клик с зажатым Ctrl по заголовку любой панели мгновенно переключает её между плавающим и закреплённым состоянием.
➡️ Блог разработчиков
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
Если вы работаете с несколькими мониторами, вы наверняка отрывали Solution Explorer или окно отладчика на второй экран. Это удобно, но поведение плавающих окон по умолчанию бывает раздражающим: они не отображаются отдельными кнопками в панели задач Windows, сворачиваются вместе с основным окном IDE и всегда остаются поверх остальных окон.
В Visual Studio есть настройка, которая это меняет.
Где найти
Tools > Options > Environment > Windows > Floating WindowsТам есть выпадающий список «These floating windows are owned by the main window» с тремя вариантами:
•
None — плавающие окна полностью независимы: у каждого своя кнопка в панели задач, они остаются на экране при • сворачивании IDE и не лезут поверх других приложений.•
Tool Windows — значение по умолчанию. Документы плавают свободно, а панели инструментов привязаны к IDE.•
Documents and Tool Windows — классическое поведение Visual Studio: всё подчиняется главному окну.Двойной клик с зажатым Ctrl по заголовку любой панели мгновенно переключает её между плавающим и закреплённым состоянием.
📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤4
🚀 .NET 11 Preview 3
Вышел третий превью-релиз .NET 11. Обновления затронули рантайм, SDK, библиотеки, ASP.NET Core, EF Core и .NET MAUI. Разберём главное.
• Библиотеки
• Рантайм
Runtime async больше не требует явного opt-in через атрибут — функция стала стабильнее и готовится к основному потоку. JIT-компилятор улучшил оптимизацию switch-выражений, проверок границ массивов и операций приведения типов. Для WebAssembly добавлена поддержка WebCIL и улучшена отладка в браузере.
• SDK
Solution-фильтры можно редактировать через CLI без открытия IDE. Файловые приложения теперь можно разбивать на несколько файлов.
• C#
Добавлена начальная поддержка типа
• ASP.NET Core
Поддержка Zstandard для сжатия ответов и распаковки запросов. Компонент
• Entity Framework Core
• Контейнеры
Образы .NET на
• .NET MAUI
Maps API получил кластеризацию маркеров, стилизацию и расширенное API взаимодействия.
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#async_news
Вышел третий превью-релиз .NET 11. Обновления затронули рантайм, SDK, библиотеки, ASP.NET Core, EF Core и .NET MAUI. Разберём главное.
• Библиотеки
System.Text.Json получил больше контроля над именованием полей и обработкой значений по умолчанию. Алгоритм сжатия Zstandard переехал в System.IO.Compression — теперь он часть стандартной библиотеки, а не отдельный пакет. ZIP-чтение добавило валидацию CRC32. Regex теперь корректно обрабатывает все Unicode-последовательности переноса строки.• Рантайм
Runtime async больше не требует явного opt-in через атрибут — функция стала стабильнее и готовится к основному потоку. JIT-компилятор улучшил оптимизацию switch-выражений, проверок границ массивов и операций приведения типов. Для WebAssembly добавлена поддержка WebCIL и улучшена отладка в браузере.
• SDK
dotnet run теперь принимает переменные окружения прямо из командной строки:dotnet run -e MY_VAR=value
Solution-фильтры можно редактировать через CLI без открытия IDE. Файловые приложения теперь можно разбивать на несколько файлов.
dotnet watch получил поддержку Aspire, восстановление после краша и улучшения для Windows Desktop.• C#
Добавлена начальная поддержка типа
union это размеченные объединения в духе F# или Rust. Пока preview, но направление понятное.• ASP.NET Core
Поддержка Zstandard для сжатия ответов и распаковки запросов. Компонент
Virtualize в Blazor теперь адаптируется к элементам с переменной высотой в рантайме. HTTP/3 начинает обрабатывать запросы раньше — меньше задержек на старте соединения.• Entity Framework Core
ChangeTracker.GetEntriesForState() позволяет получать записи по состоянию без лишнего обнаружения изменений. DbContext теперь умеет удалять провайдеры и добавлять пулы фабрик. SQL-генератор стал убирать лишние JOIN-ы, а для SQL Server добавлены JSON API.• Контейнеры
Образы .NET на
mcr.microsoft.com теперь подписываются. Можно верифицировать их подлинность перед запуском.• .NET MAUI
Maps API получил кластеризацию маркеров, стилизацию и расширенное API взаимодействия.
LongPressGestureRecognizer теперь встроен в платформу. Добавлена поддержка Android 17 / API 37 в режиме preview.📍 Навигация: Вакансии • Задачи • Собесы
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7🌚1
Team Lead C# — от 350 000 ₽ в офис или на удалёнку в Москве
Программист C#/С++/. NET (Middle) — до 400 000 ₽, офис в Москве
Backend .NET developer ( Middle/Middle+) — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
Маппинг между моделями это одна из самых скучных вещей в C#-разработке.
AutoMapper решает проблему, но тянет рефлексию в рантайме. FreakyKit.Forge генерирует весь маппинг-код на этапе компиляции через Roslyn source generators.Вы объявляете
partial-метод, библиотека генерирует его реализацию при сборке. Никакой рефлексии, никаких зависимостей в рантайме.Установка:
<ItemGroup>
<PackageReference Include="FreakyKit.Forge.Generator" Version="1.0.0" />
<PackageReference Include="FreakyKit.Forge.Analyzers" Version="1.0.0" />
</ItemGroup>
Как это работает
Помечаем статический класс атрибутом
[Forge] и объявляем метод без тела:using FreakyKit.Forge;
public class Person { public string Name { get; set; } public int Age { get; set; } }
public class PersonDto { public string Name { get; set; } public int Age { get; set; } }
[Forge]
public static partial class PersonForges
{
public static partial PersonDto ToDto(Person source);
}
При компиляции Forge генерирует реализацию:
public static partial PersonDto ToDto(Person source)
{
var __result = new PersonDto();
__result.Name = source.Name;
__result.Age = source.Age;
return __result;
}
Вызов выглядит так:
var dto = PersonForges.ToDto(person);
Возможности
Базовый сценарий это маппинг по совпадению имён. Но библиотека умеет больше.
Переименование полей через
[ForgeMap]:public class Source { [ForgeMap("Name")] public string FirstName { get; set; } }
public class Dest { public string Name { get; set; } }Вложенные объекты с
AllowNestedForging:[Forge]
public static partial class PersonForges
{
public static partial AddressDto ToAddressDto(Address source);
[ForgeMethod(AllowNestedForging = true)]
public static partial PersonDto ToDto(Person source);
}
// Генерирует: __result.Home = ToAddressDto(source.Home);
Коллекции обрабатываются автоматически —
List<T>, T[], ImmutableArray<T> и другие. Если типы элементов отличаются, достаточно включить AllowNestedForging.Обновление существующего объекта вместо создания нового — метод с двумя параметрами и
void:public static partial void Update(Person source, PersonDto existing);
// Генерирует: existing.Name = source.Name; existing.Age = source.Age;
Строгий режим для отлова расхождений при рефакторинге:
[ForgeMethod(StrictMapping = true)]
public static partial PersonDto ToDto(Person source);
// Если добавить поле в Source или Dest — компилятор выдаст ошибку, не предупреждение
Тип-конвертеры для несовместимых типов:
[ForgeConverter]
public static string ConvertDateTime(DateTime value) => value.ToString("yyyy-MM-dd");
// Forge сам найдёт подходящий конвертер и применит его при маппинге
Диагностика
Пакет
FreakyKit.Forge.Analyzers добавляет 35 диагностических правил. Ошибки в объявлениях маппингов вы увидите прямо в редакторе при сборке, а не в рантайме.📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🤔9
🔄 Апрельские обновления безопасности 2026 .NET
Microsoft выпустила плановые обновления для .NET 8, 9, 10 и .NET Framework. В этот раз пакет преимущественно про безопасность, ведь закрыто шесть CVE.
Три типа уязвимостей затронули сразу несколько версий:
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#async_news
Microsoft выпустила плановые обновления для .NET 8, 9, 10 и .NET Framework. В этот раз пакет преимущественно про безопасность, ведь закрыто шесть CVE.
Три типа уязвимостей затронули сразу несколько версий:
CVE-2026-23666 — отказ в обслуживании (DoS) в .NET Framework 3.0, 4.6.2–4.8.1CVE-2026-26171 — обход защитного механизма. Затронуты .NET 8, 9, 10 и .NET Framework 2.0, 4.6.2–4.8.1CVE-2026-32178 — удалённое выполнение кода (RCE). Затронуты .NET 8, 9, 10 и .NET Framework 2.0, 4.6.2–4.8.1CVE-2026-32203 — DoS в .NET 8, 9, 10 и .NET Framework 2.0, 4.6.2–4.8.1CVE-2026-32226 — DoS только в .NET Framework 2.0, 4.6.2–4.8.1CVE-2026-33116 — RCE в .NET 8, 9, 10📍 Навигация: Вакансии • Задачи • Собесы
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤖 Ваш ИИ-агент съедает бюджет на токены и падает при сбоях API?
Пора переходить на новый уровень. Открыли продажи курса по AgentOps — управлению ИИ-агентами в рабочих процессах.
Рынок требует инженеров, которые умеют:
• Контролировать метрики и качество ответов;
• Эффективно работать с RAG-архитектурой;
• Строить системы, готовые к реальным нагрузкам.
Обучение займет 6-12 недель под руководством практиков с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, МТС, Huawei, Raft и др.
🎁 Можно подождать, пока про AgentOps начнут говорить все. Или зайти сейчас — НА 30% ДЕШЕВЛЕ!
🔥 Забрать скидку и изучить программу.
Пора переходить на новый уровень. Открыли продажи курса по AgentOps — управлению ИИ-агентами в рабочих процессах.
Рынок требует инженеров, которые умеют:
• Контролировать метрики и качество ответов;
• Эффективно работать с RAG-архитектурой;
• Строить системы, готовые к реальным нагрузкам.
Обучение займет 6-12 недель под руководством практиков с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, МТС, Huawei, Raft и др.
🎁 Можно подождать, пока про AgentOps начнут говорить все. Или зайти сейчас — НА 30% ДЕШЕВЛЕ!
Работа с AI начинается с систем.
Системы — с AgentOps.
🔥 Забрать скидку и изучить программу.
😁2
Браузеры умеют защищать пользователей от ряда атак, но только если сервер явно это разрешает через HTTP-заголовки. Без них браузер не знает, как себя вести, и оставляет дыры открытыми.
Как добавить
Подключаем middleware в
Program.cs:app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
context.Response.Headers.Add("X-Frame-Options", "DENY");
context.Response.Headers.Add("X-XSS-Protection", "1; mode=block");
await next();
});
Этот блок нужно поставить до
app.UseRouting() и других middleware, иначе часть ответов уйдёт без заголовков.Что делает каждый заголовок
X-Content-Type-Options: nosniff запрещает браузеру угадывать тип содержимого. Без него браузер может решить, что загруженный текстовый файл — это скрипт, и выполнить его. Атака называется MIME sniffing.X-Frame-Options: DENY запрещает встраивать страницу в <iframe>. Защищает от clickjacking — когда злоумышленник накладывает прозрачный iframe поверх своего сайта и перехватывает клики пользователя:// запрет для всех
context.Response.Headers.Add("X-Frame-Options", "DENY");
// или разрешить только своему домену
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
X-XSS-Protection: 1; mode=block включает встроенный XSS-фильтр в старых браузерах. Если атака обнаружена — страница блокируется целиком, а не фильтруется частично. Современные браузеры опираются на Content-Security-Policy, а этот заголовок оставлен для совместимости со старыми версиями IE и Edge.Что добавить ещё
Три заголовка выше это минимум. Для полноценной защиты стоит также настроить:
Content-Security-Policy — белый список источников скриптов, стилей и медиа. Самый мощный инструмент против XSS:context.Response.Headers.Add(
"Content-Security-Policy",
"default-src 'self'; script-src 'self'; style-src 'self'"
);
Referrer-Policy — контролирует, какой URL браузер передаёт при переходе с вашей страницы:context.Response.Headers.Add("Referrer-Policy", "strict-origin-when-cross-origin");Permissions-Policy — ограничивает доступ к браузерным API: камера, микрофон, геолокация:context.Response.Headers.Add(
"Permissions-Policy",
"camera=(), microphone=(), geolocation=()"
);
Проверка
После деплоя проверить заголовки можно на securityheaders.com — сервис покажет, что выставлено, что отсутствует и насколько это критично. Или через DevTools: вкладка Network, любой запрос, раздел Response Headers.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥7❤4
Когда проект перерастает пару сцен, рано или поздно встаёт вопрос: как организовать доступ к общим сервисам: звуку, аналитике, данным игрока?
Два самых распространённых ответа это Singleton и Service Locator. Разберём, чем они отличаются и когда какой уместен.
Singleton
Паттерн знаком почти каждому Unity-разработчику. Один экземпляр класса на всё приложение, доступный из любой точки кода:
public class AudioManager : MonoBehaviour
{
public static AudioManager Instance { get; private set; }
private void Awake()
{
if (Instance != null)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
public void PlaySound(AudioClip clip) { /* ... */ }
}
Плюсы:
+ Просто реализовать
+ Мгновенный доступ без регистрации
+ Подходит для небольших проектов
Минусы:
- Жёсткая связность: классы напрямую зависят от конкретной реализации
- Тестировать сложно — нельзя подменить
AudioManager на заглушку- При разрастании проекта
Instance начинают тянуть отовсюду, и следить за зависимостями становится тяжелоService Locator
Service Locator это реестр сервисов. Вместо того чтобы обращаться к конкретному классу, код запрашивает нужный интерфейс у локатора.
Сначала создаём интерфейс:
public interface IAudioService
{
void PlaySound(AudioClip clip);
}
Реализация сервиса:
public class AudioManager : MonoBehaviour, IAudioService
{
public void PlaySound(AudioClip clip) { /* ... */ }
}
Сам локатор:
public static class ServiceLocator
{
private static readonly Dictionary<Type, object> services = new();
public static void Register<T>(T service)
{
services[typeof(T)] = service;
}
public static T Get<T>()
{
if (services.TryGetValue(typeof(T), out var service))
return (T)service;
throw new Exception($"Сервис {typeof(T)} не зарегистрирован");
}
}
Плюсы:
+ Код зависит от интерфейса, а не от реализации
+ Легко подменить сервис на заглушку в тестах
+ Зависимости явно регистрируются в одном месте
Минусы:
- Если забыть зарегистрировать сервис, то получим исключение в рантайме, а не ошибку компиляции
- Чуть больше кода на старте
- Без дисциплины реестр может превратиться в свалку
Когда что выбирать
Singleton оправдан в небольших проектах, где скорость разработки важнее архитектурной чистоты. Прототип, геймджем, или небольшая мобильная игра.Service Locator стоит рассмотреть, когда проект планируется развивать: появляются юнит-тесты, несколько платформ, команда из нескольких человек. Возможность подменить реализацию без изменения потребителей сервиса окупается уже при первом рефакторинге.Оба паттерна решают одну задачу — глобальный доступ к сервисам. Разница в том, насколько легко потом менять и тестировать код.
📍 Навигация: Вакансии • Задачи • Собесы
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
💡 Подсказка:
📍 Навигация: Вакансии • Задачи • Собесы
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
Бывает, что нужно понять, что делает библиотека без исходников, разобраться в чужом коде или проверить, что именно скомпилировал компилятор.
ILSpy решает эту задачу это открытый декомпилятор .NET-сборок, который превращает IL-байткод обратно в читаемый C#.
ILSpy открывает любой
.dll или .exe и показывает декомпилированный C#-код с навигацией по типам, методам и свойствам. Поддерживает поиск по всей сборке, переходы по гиперссылкам между типами и историю навигации.Visual Studio 2022 и 2026 используют движок ILSpy внутри для F12-навигации по декомпилированным источникам, так что если вы нажимали «Go to Definition» на тип из NuGet-пакета, вы уже работали с ILSpy.
CLI-инструмент для Linux, Mac и Windows:
dotnet tool install -g ilspycmd
После установки можно декомпилировать прямо из терминала:
ilspycmd MyLibrary.dll
Использование как библиотеки
Движок декомпилятора доступен отдельным NuGet-пакетом
ICSharpCode.Decompiler. Его можно встроить в собственные инструменты:var decompiler = new CSharpDecompiler("MyLibrary.dll", new DecompilerSettings());
var code = decompiler.DecompileWholeModuleAsString();
Console.WriteLine(code);📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🥱3
Когда приложение падает с необработанным исключением, стандартное поведение многих фреймворков — вывести стек вызовов прямо в ответ. Пользователь видит внутренние пути файлов, названия классов, фрагменты кода. Для злоумышленника это готовая карта уязвимостей.
Что происходит на практике
Допустим, в ASP.NET приложении возникает необработанное исключение. Без явной настройки middleware фреймворк вернёт подробный
ExceptionDetails с именем метода, строкой кода и трассировкой стека. Атакующий получает информацию о структуре проекта, версиях библиотек и логике работы приложения без каких-либо усилий.Как это закрыть
Правильный подход это перехват всех необработанныъ исключений. Нужно логировать их внутри системы и возвращать пользователю только нейтральное сообщение.
В ASP.NET это делается через
UseExceptionHandler:app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
var exceptionHandlerPathFeature =
context.Features.Get<IExceptionHandlerPathFeature>();
var logger = context.RequestServices
.GetRequiredService<ILogger<Program>>();
logger.LogError(exceptionHandlerPathFeature?.Error,
"Unhandled exception");
context.Response.StatusCode = 500;
await context.Response.WriteAsJsonAsync(new
{
message = "Something went wrong. Please try again later."
});
});
});
Что здесь происходит: middleware перехватывает исключение, передаёт его в
ILogger — туда, где его увидит только команда разработки — и возвращает клиенту простой JSON с универсальным сообщением об ошибке. Никаких деталей реализации наружу не уходит.ILogger пишет в вашу систему мониторинга — будь то Application Insights, Seq, Serilog или любой другой инструмент. Вы по-прежнему видите полный стек вызовов и можете разобраться в причине ошибки. Пользователь при этом получает понятное сообщение, а не технический мусор.Это базовая практика защиты приложений. Она не требует сложной архитектуры, достаточно одного middleware, настроенного в точке входа приложения.
📍 Навигация: Вакансии • Задачи • Собесы
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5❤3😁1🥱1
🦾 Надоело чинить «упавших» ИИ-агентов после каждого микросбоя внешних сервисов?
Анонсируем старт продаж большого курса по AgentOps. Мы собрали опыт десятков разработчиков и сделали программу, которая учит выводить ИИ в стабильный прод.
🗓 Ждем вас 28 апреля в 19:00 МСК на эфире: «Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токены».
👉 Кто вещает и в чем польза?
Спикер Кирилл Кухарев (Senior AI Engineer в Raft, спикер AI Conf и Highload++). Он реализовал более 50 коммерческих проектов в GenAI и на вебинаре покажет, как взять под контроль работу нескольких агентов, чтобы они не перекидывали друг другу лишний контекст и не сжигали ваши деньги.
В прямом эфире разберем:
• Как формируется контекст в LLM при маршрутизации между агентами;
• Куда утекают лишние токены и возникает перерасход;
• Практические методы: как сжимать историю, грамотно делить задачи, лимитировать передачу контекста и собирать промпты прямо в процессе запроса пользователя.
🔥 Два способа получить максимум:
1. Приходите на вебинар 28 апреля. Дарим участникам промокод на 5.000 ₽ (работает 3 дня после эфира - это шанс забрать курс по самому низу рынка).
2. Выбирайте Инженерный трек. В подарок к нему идет полный доступ к записям и автопроверкам завершенного курса «Разработка ИИ-агентов».
👉 Занять место на вебинаре и стать профи в AgentOps
Анонсируем старт продаж большого курса по AgentOps. Мы собрали опыт десятков разработчиков и сделали программу, которая учит выводить ИИ в стабильный прод.
🗓 Ждем вас 28 апреля в 19:00 МСК на эфире: «Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токены».
Спикер Кирилл Кухарев (Senior AI Engineer в Raft, спикер AI Conf и Highload++). Он реализовал более 50 коммерческих проектов в GenAI и на вебинаре покажет, как взять под контроль работу нескольких агентов, чтобы они не перекидывали друг другу лишний контекст и не сжигали ваши деньги.
В прямом эфире разберем:
• Как формируется контекст в LLM при маршрутизации между агентами;
• Куда утекают лишние токены и возникает перерасход;
• Практические методы: как сжимать историю, грамотно делить задачи, лимитировать передачу контекста и собирать промпты прямо в процессе запроса пользователя.
🔥 Два способа получить максимум:
1. Приходите на вебинар 28 апреля. Дарим участникам промокод на 5.000 ₽ (работает 3 дня после эфира - это шанс забрать курс по самому низу рынка).
2. Выбирайте Инженерный трек. В подарок к нему идет полный доступ к записям и автопроверкам завершенного курса «Разработка ИИ-агентов».
👉 Занять место на вебинаре и стать профи в AgentOps
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🔍 ILSpy 10.0: поддержка C# 14, API diff и переход на .NET 10
Вышел крупный релиз ILSpy. Релиз собран на .NET 10, так что перед обновлением убедитесь, что он у вас установлен.
Новые языковые возможности
Декомпилятор теперь понимает конструкции C# 13 и C# 14. Добавлена поддержка ограничения
Новое в интерфейсе
Появился выделенный UI для работы с C# 14 extension-членами. Добавлена навигация по видимой истории — теперь можно перемещаться по посещённым узлам в дереве сборок. Из поставки убрали переводы интерфейса — проект сосредоточился на английском.
API diff
Одна из самых интересных новинок. ILSpy теперь умеет сравнивать публичное API двух сборок и показывать разницу. Полезно при анализе изменений между версиями библиотек, когда исходников нет.
Улучшения декомпилятора
Исправлена корректная декомпиляция pre-increment операторов, unmanaged function pointers и локальных функций с параметрами по умолчанию. Улучшено определение record-типов и primary constructors.
Пакетная генерация PDB
Новый метод
Чистка API
Удалены устаревшие типы:
Производительность
Убрана XML-сериализация из
Важное предупреждение
Команда отдельно предупреждает: домен
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#async_news
Вышел крупный релиз ILSpy. Релиз собран на .NET 10, так что перед обновлением убедитесь, что он у вас установлен.
Новые языковые возможности
Декомпилятор теперь понимает конструкции C# 13 и C# 14. Добавлена поддержка ограничения
allows ref struct из C# 13 и extension-членов из C# 14. Также подтянули поддержку InlineArray из C# 12 — на удивление поздно, но лучше поздно чем никогда. Детекция паттернов обновлена до Roslyn 5.0 RTM.Новое в интерфейсе
Появился выделенный UI для работы с C# 14 extension-членами. Добавлена навигация по видимой истории — теперь можно перемещаться по посещённым узлам в дереве сборок. Из поставки убрали переводы интерфейса — проект сосредоточился на английском.
API diff
Одна из самых интересных новинок. ILSpy теперь умеет сравнивать публичное API двух сборок и показывать разницу. Полезно при анализе изменений между версиями библиотек, когда исходников нет.
Улучшения декомпилятора
Исправлена корректная декомпиляция pre-increment операторов, unmanaged function pointers и локальных функций с параметрами по умолчанию. Улучшено определение record-типов и primary constructors.
CSharpConversions получил общие улучшения для правил C# вплоть до версии 9. Дизассемблер теперь поддерживает формат ildasm /caverbal.Пакетная генерация PDB
Новый метод
GeneratePdbForAssemblies заменил старый GeneratePdbForAssembly — теперь можно генерировать PDB для нескольких сборок за один вызов.Чистка API
Удалены устаревшие типы:
UnresolvedUsingScope, ToTypeReference, ITypeReference. ResolvedUsingScope переименован в UsingScope. Если вы используете ICSharpCode.Decompiler как NuGet-пакет в своих инструментах — стоит проверить совместимость.Производительность
Убрана XML-сериализация из
DecompilerSettings — настройки теперь сохраняются быстрее.Важное предупреждение
Команда отдельно предупреждает: домен
ilspy.org им не принадлежит. Скачивать ILSpy нужно только с GitHub Releases.📍 Навигация: Вакансии • Задачи • Собесы
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
📰 Новостной дайджест
Свежая газетка у вас на пороге
— Хирургия над контекстным меню Windows 11
— Фриланс для разработчиков
— Не фриланс для разработчиков
— .NET 11 Preview 3
— Обновления безопасности 2026 .NET
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#async_news
Свежая газетка у вас на пороге
— Хирургия над контекстным меню Windows 11
— Фриланс для разработчиков
— Не фриланс для разработчиков
— .NET 11 Preview 3
— Обновления безопасности 2026 .NET
📍 Навигация: Вакансии • Задачи • Собесы
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🏃♀️ Уже завтра стартует курс по разработке AI-агентов.
Про AI-агентов часто думают, что это просто модная обертка над джпт для пет-проектов. Кажется, прикрутил API к скрипту и типа готово. А вот и нет! Когда дело доходит до прода, начинаются настоящие проблемы.
Эту инженерную часть мы и будем разбирать на курсе. Будем учиться интегрировать внешние API, работать с RAG, LangGraph, CrewAI и деплоить всё это так, чтобы работало как часы.
Стартуем завтра. Для участия и доступа к программе переходите по ссылке.
Про AI-агентов часто думают, что это просто модная обертка над джпт для пет-проектов. Кажется, прикрутил API к скрипту и типа готово. А вот и нет! Когда дело доходит до прода, начинаются настоящие проблемы.
Зачем глубоко копать мультиагентные системы, если можно обойтись старым добрым кодом? Как контролировать расходы на токены, чтобы новая фича не разорила бизнес? Как заставить агента работать стабильно и предсказуемо, а не галлюцинировать?
Эту инженерную часть мы и будем разбирать на курсе. Будем учиться интегрировать внешние API, работать с RAG, LangGraph, CrewAI и деплоить всё это так, чтобы работало как часы.
Стартуем завтра. Для участия и доступа к программе переходите по ссылке.
❤3