# Start Debugging > Daily notes on .NET, C#, EF Core, MAUI, Blazor, and Flutter — for developers who ship. Start Debugging is a developer-focused blog covering .NET, C#, Entity Framework Core, .NET MAUI, Blazor, and Flutter. The content below is curated for AI assistants and search agents looking for accurate, version-pinned references. ## Best of / Featured - [EF Core 11 Adds Native SQL Server Vector Search with DiskANN Indexes](https://startdebugging.net/2026/04/efcore-11-sql-server-vector-search-diskann-indexes/): EF Core 11 Preview 2 supports SQL Server 2025 VECTOR_SEARCH() and DiskANN vector indexes directly from LINQ. Here is how to set up the index, run approximate queries, and what changes from the EF Core 10 VectorDistance approach. - [C# 15 Union Types Are Here: Type Unions Ship in .NET 11 Preview 2](https://startdebugging.net/2026/04/csharp-15-union-types-dotnet-11-preview-2/): C# 15 introduces the union keyword for type unions with exhaustive pattern matching and implicit conversions. Available now in .NET 11 Preview 2. - [.NET 11 Runtime Async Replaces State Machines with Cleaner Stack Traces](https://startdebugging.net/2026/04/dotnet-11-runtime-async-cleaner-stack-traces/): Runtime Async in .NET 11 moves async/await handling from compiler-generated state machines into the runtime itself, producing readable stack traces, correct breakpoints, and fewer heap allocations. ## Pillars (topical hubs) - [ASP.NET Core 11 cheat sheet](https://startdebugging.net/pillars/aspnetcore-11-cheat-sheet/): ASP.NET Core 11 in one place: minimal APIs, OpenAPI, authentication, rate limiting, OpenTelemetry, Native AOT, and the Kestrel/HTTP-3 wins. - [C# 14 features](https://startdebugging.net/pillars/csharp-14-features/): All C# 14 language features with runnable examples: union types, partial members, extensions, and the smaller ergonomic wins. - [EF Core 11 cheat sheet](https://startdebugging.net/pillars/efcore-11-cheat-sheet/): Quick reference for EF Core 11: new query features, vector search, performance wins, and migration notes from EF Core 8/9/10. - [The .NET 11 tracker](https://startdebugging.net/pillars/dotnet-11-tracker/): Every preview, every feature, every breaking change - one place to bookmark for the .NET 11 release cycle. - [The coding agents tracker](https://startdebugging.net/pillars/coding-agents-tracker/): Claude Code, Cursor, Copilot, MCP, Microsoft Agent Framework - every post on building and working with AI coding agents, in one place. - [The Flutter & Dart tracker](https://startdebugging.net/pillars/flutter-tracker/): Flutter and Dart in one place: jank profiling, isolates, state management, CI matrices, platform channels, and the 3.x release cycle. - [The MAUI & Xamarin tracker](https://startdebugging.net/pillars/maui-xamarin-tracker/): .NET MAUI and Xamarin in one place: the MAUI 11 release cycle, CoreCLR-on-mobile, gesture and map work, the Xamarin.Forms migration story, and the long tail of build errors. ## Recent posts (last 50) - [Claude Code 2.1.224 Lets One Session Message Another](https://startdebugging.net/2026/08/claude-code-2-1-224-sessions-message-each-other/): Cross-session messaging landed on August 7, 2026. ListAgents and SendMessage move plain text between your sessions, and crossSessionInbound decides what actually arrives. - [How to call a stored procedure and map its results in EF Core 11](https://startdebugging.net/2026/08/how-to-call-a-stored-procedure-and-map-its-results-in-ef-core-11/): Use FromSql on a DbSet when the procedure returns full entity rows, Database.SqlQuery when it returns a projection, and ExecuteSql when it returns nothing. Never chain a LINQ operator onto an EXEC, and never read an output parameter before the reader is disposed. - [How to customize source-generated System.Text.Json serialization with a type-info resolver modifier](https://startdebugging.net/2026/08/how-to-customize-source-generated-system-text-json-serialization-with-a-modifier/): Attach a JsonTypeInfo modifier to a source-generated JsonSerializerContext in .NET 11: why new MyContext(options) silently drops it, the WithAddedModifier setup that works, the fast path you give up (measured), and the naming-policy trap that makes modifiers no-op. - [Migrate Cursor Rules to Skills, Subagents, and Plugins (Cursor 3.11)](https://startdebugging.net/2026/08/migrate-cursor-rules-to-skills-subagents-and-plugins/): Cursor did not delete rules. It split them. This checklist sorts a .cursorrules file and a folder of .mdc rules into the four things they should be in Cursor 3.11: an AGENTS.md, a small set of surviving rules, skills, and subagents, then bundles the result as a plugin. - [Copilot MCP Allowlists Land in Enterprise Managed Settings](https://startdebugging.net/2026/08/copilot-mcp-allowlists-enterprise-managed-settings/): GitHub's August 6, 2026 changelog adds allowedMcpServers and deniedMcpServers to copilot/managed-settings.json. URL and argv matchers, deny-wins precedence, and a fail-closed default the older name-based registry never had. - [How to rename a table in an EF Core 11 migration without losing data](https://startdebugging.net/2026/08/how-to-rename-a-table-in-an-ef-core-11-migration-without-losing-data/): EF Core scaffolds RenameTable when you change the table name, but DropTable plus CreateTable when you rename the entity class. Here is how to tell the two apart, the ToTable trick that makes a class rename free, and the column-rename bug that silently swaps your data. - [How to run a file-based C# app with `dotnet run app.cs` in .NET 11](https://startdebugging.net/2026/08/how-to-run-a-file-based-csharp-app-with-dotnet-run-in-dotnet-11/): A complete guide to file-based C# apps: running a single .cs file with dotnet run, the #:package, #:sdk, #:property, #:project and #:include directives, multi-file scripts with #:ref, argument and stdin handling, the build cache, native AOT publishing, packaging as a dotnet tool, and dotnet project convert when the script outgrows itself. - [How to serve OpenAPI documentation with Scalar instead of Swagger UI in ASP.NET Core 11](https://startdebugging.net/2026/08/how-to-serve-openapi-docs-with-scalar-instead-of-swagger-ui-in-aspnetcore-11/): Replace UseSwaggerUI with MapScalarApiReference in ASP.NET Core 11: routing, multiple documents, pre-filled auth, production gating, offline assets, and the Scalar-only OpenAPI extensions that mark endpoints stable or hidden. - [Migrate a Custom TypeScript Agent Loop to the Cursor SDK (@cursor/sdk 1.0.26)](https://startdebugging.net/2026/08/migrate-a-custom-typescript-agent-loop-to-the-cursor-sdk/): A step-by-step checklist for retiring a hand-rolled while-loop agent and running the same job on @cursor/sdk 1.0.26. The tool bodies survive, the loop does not, and three things you probably rely on have no equivalent: a system prompt string, a tool allowlist, and per-turn control. - [Aspire vs Docker Compose for local multi-service development](https://startdebugging.net/2026/08/aspire-vs-docker-compose-for-local-multi-service-development/): Aspire 13.4.6 wins the .NET inner loop because it runs your projects as host processes you can debug, while Docker Compose wins when the compose file is also your CI and deployment contract. Measured startup and edit-to-running timings on both, the configuration each one injects for you, and the six gotchas that decide it. - [Microsoft.Testing.Platform 2.3: --report-gh Puts Test Failures on the PR Diff](https://startdebugging.net/2026/08/microsoft-testing-platform-2-3-github-actions-annotations/): The .NET blog's August 6, 2026 post on MTP reporting surfaces a batch of extensions that went stable in Microsoft.Testing.Platform 2.3.0: GitHub Actions annotations, crash-resilient TRX streaming, and Azure DevOps flaky history. - [Migrate a Custom Multi-Agent Orchestrator to Handoff Orchestration in Agent Framework 1.17](https://startdebugging.net/2026/08/migrate-a-custom-multi-agent-orchestrator-to-handoff-orchestration/): Replace a hand-rolled classifier-plus-switch router with AgentWorkflowBuilder.CreateHandoffBuilderWith in Microsoft.Agents.AI.Workflows 1.17.0. What breaks, the six migration steps, and the gotchas around agent Ids, descriptions, and context broadcast. - [WebApplicationFactory vs Testcontainers for ASP.NET Core integration tests](https://startdebugging.net/2026/08/webapplicationfactory-vs-testcontainers-for-aspnetcore-integration-tests/): They are not alternatives. WebApplicationFactory boots your app, Testcontainers boots your dependencies. Measured on .NET SDK 10.0.201: a container fixture costs 1.7 s per class against 10 ms for SQLite, and a HasMaxLength(16) violation that Postgres rejects with 22001 is silently accepted by SQLite. - [xUnit v3 vs NUnit vs MSTest in 2026: which should you pick?](https://startdebugging.net/2026/08/xunit-v3-vs-nunit-vs-mstest-in-2026/): Pick xUnit v3 for greenfield .NET projects, NUnit 4.6 if you live in its constraint model, MSTest 4 if you already ship it. A measured comparison on .NET SDK 10.0.201 covering parallelism defaults, test class lifecycle, assertion failure output, and the Microsoft.Testing.Platform version conflict that breaks the NUnit runner. - [Copilot Automations Now Trigger on Issue and PR Comments](https://startdebugging.net/2026/08/copilot-automations-now-trigger-on-issue-and-pr-comments/): GitHub's August 3, 2026 changelog adds a comment trigger to Copilot cloud agent automations, replacing the issue_comment workflow plus PAT plus REST dispatch that teams have been hand-rolling since June. - [Fix: Attempting to reconnect to the server after a Blazor Server circuit disconnects](https://startdebugging.net/2026/08/fix-attempting-to-reconnect-to-the-server-after-a-blazor-circuit-disconnects/): The reconnect modal means the SignalR circuit dropped, not that your app crashed. Decide whether the retry ended in failed or rejected, then fix sticky sessions, the 3-minute retention window, the 32 KB message limit, or persist circuit state with [PersistentState]. - [Fix: flutter doctor reports cmdline-tools component is missing](https://startdebugging.net/2026/08/fix-flutter-doctor-cmdline-tools-component-is-missing/): Install the Android SDK Command-line Tools so the binaries land in /cmdline-tools/latest/bin, point ANDROID_HOME at the SDK root, then re-run flutter doctor. - [gRPC vs REST vs SignalR for service-to-service calls in .NET 11](https://startdebugging.net/2026/08/grpc-vs-rest-vs-signalr-for-service-to-service-calls-in-dotnet-11/): For internal service-to-service calls in .NET 11, default to gRPC when you own both ends of the contract and the call is point-to-point. Use REST with JSON when anything you do not control has to call the service. SignalR is not an RPC transport between services: reach for it only when one producer has to fan a message out to many long-lived consumers. - [Subtask vs Fork vs Background Agent in Claude Code: Which Delegation to Reach For](https://startdebugging.net/2026/08/subtask-vs-fork-vs-background-agent-in-claude-code/): A named subagent starts cold, a fork inherits your whole conversation and shares your prompt cache, and a background agent is a second Claude Code session entirely. The trap is the naming: /fork stopped being the in-session fork at v2.1.212 and /subtask took over. - [Declarative YAML Workflows vs Code-First Orchestration in Microsoft Agent Framework](https://startdebugging.net/2026/08/agent-framework-declarative-yaml-vs-code-first-orchestration/): Use declarative YAML when the graph is a sequential routing decision that non-developers change often. Use code-first WorkflowBuilder the moment you need parallelism, custom executors, or a non-Foundry agent. Here is the decision, the action catalog limits, and the code both ways. - [Fix: AggregateException "One or more errors occurred" when awaiting Task.WhenAll in C#](https://startdebugging.net/2026/08/fix-aggregateexception-one-or-more-errors-occurred-when-awaiting-task-whenall/): await Task.WhenAll rethrows only one of the failures. Keep the WhenAll task in a variable and read its Exception.InnerExceptions to see every error instead of one. - [Fix: CS1998 "This async method lacks 'await' operators and will run synchronously" in C#](https://startdebugging.net/2026/08/fix-cs1998-this-async-method-lacks-await-operators-and-will-run-synchronously/): CS1998 means an async method has no await, so it runs synchronously. Drop the async modifier and return Task.FromResult, or add the await you forgot. - [Fix: HTTP Error 500.30 - ASP.NET Core app failed to start after deploying to IIS](https://startdebugging.net/2026/08/fix-http-error-500-30-aspnet-core-app-failed-to-start-on-iis/): 500.30 means your app threw during startup inside w3wp.exe. The real exception is already in the Windows Application event log under IIS AspNetCore Module V2. Read that first, then rank the fix: missing shared framework, x86/x64 app pool mismatch, missing config, or app pool permissions. - [Live Speech-to-Text in C# with Foundry Local: A 0.67 GB Model and No Cloud Call](https://startdebugging.net/2026/08/foundry-local-live-speech-to-text-in-csharp/): The .NET blog shipped a live microphone transcription sample on August 4, 2026 using Foundry Local and nemotron-speech-streaming-en-0.6b. Here is the session API, the PCM backpressure trap, and which NuGet package to pick. - [Auto Mode vs Manual Approval in Claude Code: What Each Mode Actually Allows Through](https://startdebugging.net/2026/08/auto-mode-vs-manual-approval-what-each-permission-mode-allows/): Manual gates every tool call on you. Auto mode gates them on a classifier with 32 built-in block rules. The mode that surprises people is neither: acceptEdits auto-approves rm, mv, and sed, not just file edits. Measured on Claude Code 2.1.123. - [Fix: No Material widget found in Flutter](https://startdebugging.net/2026/08/fix-no-material-widget-found-in-flutter/): Wrap the subtree in Material(type: MaterialType.transparency) or put the screen in a Scaffold. MaterialApp alone does not provide a Material ancestor, which is why TextField and InkWell assert. - [How to build an infinite-scrolling paginated list in Flutter with ScrollController](https://startdebugging.net/2026/08/how-to-build-an-infinite-scrolling-paginated-list-in-flutter-with-scrollcontroller/): Attach a ScrollController to a ListView.builder, fire the next page when position.extentAfter drops below a prefetch threshold, and guard the fetch with isLoading, hasMore, and error flags. Full implementation plus the short-first-page trap. - [How to enable multi-window support in a Flutter desktop app](https://startdebugging.net/2026/08/how-to-enable-multi-window-support-in-a-flutter-desktop-app/): Flutter 3.44.8 stable still ships no public multi-window API. Here is how to turn on the experimental windowing feature flag on the main channel, use RegularWindowController and WindowManager to open real top-level windows, and what to ship instead if you need stable today. - [NuGet API Keys Get a 30-Day Cap on August 17, and Every Old Key Expires November 1](https://startdebugging.net/2026/08/nuget-api-keys-capped-at-30-days-from-august-17/): NuGet.org drops the 365-day API key option on August 17, 2026, caps new keys at 30 days, and expires every key created before that date on November 1. Here is what breaks and how to move a publish workflow to OIDC trusted publishing. - [Agent Framework's Copilot Provider Turns the Copilot CLI Into a Plain AIAgent](https://startdebugging.net/2026/08/agent-framework-github-copilot-provider-copilot-cli-as-aiagent/): Microsoft.Agents.AI.GitHub.Copilot 1.16.0 shipped on July 30, 2026. The Copilot CLI runtime now sits behind the ordinary AIAgent abstraction, permissions are deny-by-default, and Squad plugs a whole agent team in as one AIAgent. - [Fix: "Write(src/**) is not matched by file permission checks" in Claude Code](https://startdebugging.net/2026/08/fix-write-rule-is-not-matched-by-file-permission-checks/): Claude Code only consults Edit(path) and Read(path) rules. A Write(src/**) allow or deny rule is accepted and then silently ignored. Use Edit() instead. - [How to implement optimistic concurrency with a rowversion token in EF Core 11](https://startdebugging.net/2026/08/how-to-implement-optimistic-concurrency-with-a-rowversion-token-in-ef-core-11/): Add a rowversion concurrency token in EF Core 11: the [Timestamp] and IsRowVersion setup, the SQL EF actually emits, catching DbUpdateConcurrencyException, store-wins vs client-wins vs merge, disconnected APIs with ETags, and the five traps that silently disable the whole thing. - [How to store an enum as a string in EF Core 11 with a value converter](https://startdebugging.net/2026/08/how-to-store-an-enum-as-a-string-in-ef-core-11-with-a-value-converter/): Store C# enums as readable strings instead of ints in EF Core 11: HasConversion, bulk configuration for every enum, the nvarchar(max) trap, the ordering gotcha, and how to migrate an existing int column. - [How to validate options at startup with IValidateOptions in .NET 11](https://startdebugging.net/2026/08/how-to-validate-options-at-startup-with-ivalidateoptions-in-dotnet-11/): Implement IValidateOptions, register it in DI, and chain ValidateOnStart so a bad appsettings.json kills the process instead of the first request that touches it. Covers the .NET 11 Validate() overload, async validation through IAsyncValidateOptions, and the three places ValidateOnStart silently does nothing. - [How to configure Kestrel to serve HTTP/3 in ASP.NET Core 11](https://startdebugging.net/2026/08/how-to-configure-kestrel-to-serve-http-3-in-aspnetcore-11/): A complete guide to enabling HTTP/3 on Kestrel in ASP.NET Core 11: the HttpProtocols.Http1AndHttp2AndHttp3 endpoint config, MsQuic platform requirements on Windows, Linux, and macOS, why the first request is never HTTP/3, how to verify with HttpClient and middleware, QuicTransportOptions tuning, and the firewall and proxy gotchas that make it silently fall back. - [How to replace new Regex(...) with the [GeneratedRegex] source generator in .NET 11](https://startdebugging.net/2026/08/how-to-replace-new-regex-with-the-generatedregex-source-generator-in-dotnet-11/): A complete guide to converting new Regex(pattern, RegexOptions.Compiled) into [GeneratedRegex] in .NET 11: the mechanical rewrite, partial methods vs partial properties, measured startup and throughput numbers, the SYSLIB1040-1045 diagnostics, and the two patterns where the generator silently falls back to a cached Regex. - [How to run CPU-bound work in a Blazor WebAssembly app with Web Workers in .NET 11](https://startdebugging.net/2026/08/how-to-run-cpu-bound-work-in-a-blazor-webassembly-app-with-web-workers-in-dotnet-11/): A complete guide to offloading CPU-bound work off the Blazor WebAssembly UI thread in .NET 11: why Task.Run does not help, the new blazorwebworker template, the WebWorkerClient API with cancellation and timeouts, the JSExport marshalling limits, and the second-runtime cost you pay per worker. - [Visual Studio 18.8 Ships .NET Agent Skills Built In, Then Turns Them All Off](https://startdebugging.net/2026/08/visual-studio-18-8-built-in-dotnet-agent-skills-off-by-default/): Visual Studio 2026 18.8 puts expert-authored .NET and Azure agent skills in the tool picker under a Built-in category, disabled by default. The default is the interesting part. - [The New .NET Unit-Test Agent's Best Idea Is Not Writing Tests](https://startdebugging.net/2026/08/dotnet-skills-polyglot-unit-test-agent-assertion-gate/): On 2026-07-31 Microsoft shipped a polyglot unit-test agent in dotnet/skills. The interesting part is the mandatory pre-completion gate that pseudo-mutates your assertions before the agent is allowed to say it is done. - [Fix: A RenderFlex overflowed by N pixels on the bottom when the keyboard opens in Flutter](https://startdebugging.net/2026/08/fix-renderflex-overflowed-on-the-bottom-when-the-keyboard-opens-in-flutter/): The keyboard shrinks your Scaffold body's max height, so a Column that just fit now overflows. Wrap the body in a scrollable instead of turning resizeToAvoidBottomInset off. - [IOptions vs IOptionsSnapshot vs IOptionsMonitor in .NET 11](https://startdebugging.net/2026/08/ioptions-vs-ioptionssnapshot-vs-ioptionsmonitor-in-dotnet-11/): Default to IOptions. Use IOptionsMonitor when a singleton has to see config reloads, and IOptionsSnapshot only when a scoped consumer wants a value that is stable for one request. The deciding axis is the lifetime of the consumer, not the shape of the settings. - [Copilot Code Review Now Reads Your .github/skills Folder](https://startdebugging.net/2026/07/copilot-code-review-agent-skills-and-mcp-ga/): Agent skills and MCP servers in GitHub Copilot code review went GA on 2026-07-29. Here is where the files live, why skills load from the head branch, and why every MCP tool call in a review is read-only. - [Fix: CocoaPods could not find compatible versions for pod during a Flutter iOS build](https://startdebugging.net/2026/07/fix-cocoapods-could-not-find-compatible-versions-for-pod-in-a-flutter-ios-build/): Read the second line of the error, not the first. It names the cause: a stale Podfile.lock snapshot, a deployment target that is too low, or two plugins pinning the same transitive pod. - [Fix: Gradle task assembleDebug failed with exit code 1 in a Flutter Android build](https://startdebugging.net/2026/07/fix-gradle-task-assembledebug-failed-with-exit-code-1-in-flutter/): That line is a wrapper, not the error. Re-run with flutter run --verbose or ./gradlew assembleDebug --stacktrace, read the real Gradle failure, then fix that. - [Fix: A Long MCP Tool Call Gets Auto-Backgrounded After Two Minutes Mid-Task](https://startdebugging.net/2026/07/fix-long-mcp-tool-call-auto-backgrounded-after-two-minutes/): Claude Code 2.1.212+ moves any main-conversation MCP tool call still running at two minutes into a background task. Set CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS=0 to stop it, raise the threshold to move the line, or send progress notifications from the server. - [Fix: Unable to load asset in Flutter after adding an image to pubspec.yaml](https://startdebugging.net/2026/07/fix-unable-to-load-asset-in-flutter-after-adding-an-image-to-pubspec-yaml/): The asset key is missing from the compiled bundle, not from your disk. Fix the pubspec indentation, add the trailing slash, match the key exactly, then full restart. - [Fix: JavaScript interop calls cannot be issued at this time (Blazor prerendering)](https://startdebugging.net/2026/07/fix-javascript-interop-calls-cannot-be-issued-at-this-time-blazor-prerendering/): Prerendering runs your component on the server with no browser attached, so IJSRuntime throws. Move the call into OnAfterRenderAsync, gate it on RendererInfo.IsInteractive, or disable prerendering. - [Fix: .mcp.json servers never start because the workspace is marked untrusted](https://startdebugging.net/2026/07/fix-mcp-json-servers-never-start-because-the-workspace-is-untrusted/): Project MCP servers stuck at Pending approval are not misconfigured. Run claude interactively in the folder, accept the workspace trust dialog, then approve the servers. - [Fix: Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design](https://startdebugging.net/2026/07/fix-startup-project-doesnt-reference-microsoft-entityframeworkcore-design/): Add Microsoft.EntityFrameworkCore.Design to the startup project that dotnet ef builds, not the project holding your DbContext, and pass -s in layered solutions. - [Visual Studio 18.9 Lets You Set Thinking Effort Per Model](https://startdebugging.net/2026/07/visual-studio-18-9-thinking-effort-control-per-model/): Visual Studio 18.9 Insiders 2 adds a per-model thinking effort control with Low through Max levels, exposing the same reasoning-effort dial the underlying model APIs take. ## Reference - [About the author](https://startdebugging.net/about/): Marius Bughiu — author and maintainer - [Start here](https://startdebugging.net/start-here/): Curated entry points by topic - [All tags](https://startdebugging.net/tags/): Browse posts by tag - [Archive](https://startdebugging.net/archive/): Full chronological archive - [RSS feed](https://startdebugging.net/rss.xml): Subscribe to new posts