Start Debugging

Ежедневные заметки о .NET, C#, EF Core, MAUI, Blazor и Flutter для разработчиков, которые выпускают код.

2026-10-04 dotnetdotnet-10csharp
Как добавить полный открытый ключ сборки со строгим именем в InternalsVisibleTo в проекте SDK-стиля
Подписанная сборка должна указывать дружественную сборку по полному открытому ключу из 320 символов, а не по токену, иначе сборка падает с CS1726 или CS0281. Получите ключ с помощью sn -p и sn -tp или кроссплатформенного скрипта на .NET, затем поместите его в метаданные Key элемента InternalsVisibleTo в .csproj. Также разобраны запасной вариант со свойством PublicKey, ключ DynamicProxyGenAssembly2 для Moq и ловушка с переносами строк.
2026-10-04 ef-coreef-core-10postgresql
Как задать параметры сеанса PostgreSQL, такие как search_path или statement_timeout, для каждого подключения EF Core с Npgsql
Однократно выполненный SET стирается командой DISCARD ALL в тот момент, когда Npgsql возвращает подключение в пул. Передайте search_path и statement_timeout в стартовом пакете через ключевые слова строки подключения Search Path и Options, а при необходимости используйте ALTER ROLE или перехватчик ConnectionOpened, и узнайте, почему UsePhysicalConnectionInitializer молча теряет свой SET.
2026-10-04 nunittestingdotnet
NUnit 5: Assert.ThrowsAsync теперь возвращает Task, а без await тест проходит молча
NUnit 5.0.0 делает Assert.ThrowsAsync, CatchAsync и DoesNotThrowAsync по-настоящему асинхронными. Если забыть await, проверка просто не выполнится. Что ломается, что ловит правило NUnit2059 из NUnit.Analyzers и какие ещё изменения NUnit 5 стоит проверить перед обновлением.
2026-10-03 csharpdotnetasync
Как синхронно дождаться ValueTask в неасинхронном методе без выделения памяти
Сначала проверьте IsCompleted и прочитайте результат через GetAwaiter().GetResult(): это стоит 0 байт. Блокируйтесь только если ValueTask ещё не завершён, и делайте это через кешированное событие и UnsafeOnCompleted вместо AsTask(), который выделяет от 72 до 208 байт на вызов. Измерено на .NET 10 и .NET 11 RC1.
2026-10-02 agent-frameworkdotnetai-agents
Agent Framework 1.23: middleware функций наконец может подменить вызываемый инструмент
Microsoft Agent Framework .NET 1.23.0 учитывает присваивание FunctionInvocationContext.Function, поэтому middleware может перенаправить вызов инструмента на другую AIFunction. Новый хелпер WrapWithPendingMiddleware сохраняет участие остальной цепочки.
2026-10-02 comparisonef-coredotnet
EF.Parameter или EF.Constant в запросах EF Core 11
EF.Constant встраивает захваченное значение в SQL как литерал, EF.Parameter превращает литерал в SQL-параметр. Оставляйте поведение EF Core по умолчанию, используйте EF.Parameter, чтобы динамически построенные деревья выражений не перекомпилировались при каждом вызове, а EF.Constant применяйте только для значений с небольшим набором вариантов и настолько перекошенными данными, что каждому нужен свой план.
2026-10-02 comparisoncsharpdotnet
Volatile.Read и Volatile.ReadBarrier в .NET 10
Volatile.Read выполняет чтение одной ячейки с семантикой acquire. Volatile.ReadBarrier, новый в .NET 10, это барьер, который придаёт семантику acquire всем предшествующим чтениям. Используйте Volatile.Read для флагов и опубликованных ссылок, а ReadBarrier, когда нужно, чтобы пачка обычных или неатомарных чтений завершилась до следующего обращения к памяти, как в seqlock.
2026-10-01 errorsdotnettesting
Исправление: dotnet test завершается с кодом 5 и "Zero tests ran" на Microsoft.Testing.Platform
Код выхода 5 означает, что MTP отклонил параметр командной строки, а не то, что тесты отсутствуют. Запустите исполняемый файл тестов напрямую, чтобы увидеть настоящую ошибку, затем добавьте пакет расширения или направьте параметр только в нужные проекты.
Страница 1 из 82