The .NET 11 tracker
One bookmark for the whole .NET 11 cycle.
This pillar collects everything I’ve written about .NET 11: previews, runtime changes, GC updates, JIT work, and the new BCL surface. Bookmark this page and I’ll keep it current as each preview drops.
What to read first
If you’re new to the .NET 11 story, start with the posts tagged “.net 11 preview” near the top of the list. Each one covers a single preview’s highlights. The older posts stay useful because .NET 11’s feature set is cumulative.
What’s on this page
The table below is auto-generated from posts tagged with any of: .net 11, dotnet 11, .net 11 preview, dotnet, .net. A weekly job re-sorts it so the newest coverage bubbles up.
If you want the cheat-sheet-style quick reference instead of chronological coverage, check the companion “EF Core 11 cheat sheet” and “C# 14 features” pillars linked from the /pillars/ index.
Index (121 posts)
2026 / 04
- Kestrel starts processing HTTP/3 requests before the SETTINGS frame in .NET 11 Preview 3
.NET 11 Preview 3 lets Kestrel serve HTTP/3 requests before the peer's control stream and SETTINGS frame arrive, shaving handshake latency off the first request on every new QUIC connection.
- EF Core 11 translates Contains to JSON_CONTAINS on SQL Server 2025
EF Core 11 auto-translates LINQ Contains over JSON collections to the new SQL Server 2025 JSON_CONTAINS function, and adds EF.Functions.JsonContains for path-scoped and mode-specific queries that can hit a JSON index.
- Agent Skills Land in Visual Studio 2026 18.5: Copilot Auto-Discovers SKILL.md From Your Repo
Visual Studio 2026 18.5.0 lets GitHub Copilot load Agent Skills from .github/skills, .claude/skills, and ~/.copilot/skills. Reusable SKILL.md instruction packs travel with your repo.
- RyuJIT trims more bounds checks in .NET 11 Preview 3: index-from-end and i + constant
.NET 11 Preview 3 teaches RyuJIT to eliminate redundant bounds checks on consecutive index-from-end access and on i + constant < length patterns, cutting branch pressure in tight loops.
- RegexOptions.AnyNewLine lands in .NET 11 Preview 3: Unicode-aware anchors without the \r? hacks
.NET 11 Preview 3 adds RegexOptions.AnyNewLine so ^, $, \Z, and . recognize every Unicode newline sequence, including \r\n, NEL, LS, and PS, with \r\n treated as one atomic break.
- Aspire 13.2 --isolated: Run Parallel AppHost Instances Without Port Collisions
Aspire 13.2 ships an --isolated flag that gives each aspire run its own random ports and secrets store. It unblocks multi-checkout work, agent worktrees, and integration tests that need a live AppHost.
- .NET 11 Preview 3: dotnet run -e sets environment variables without launch profiles
dotnet run -e in .NET 11 Preview 3 passes environment variables straight from the CLI and surfaces them as MSBuild RuntimeEnvironmentVariable items.
- dotnet sln finally edits solution filters from the CLI in .NET 11 Preview 3
.NET 11 Preview 3 teaches dotnet sln to create, add, remove, and list projects in .slnf solution filters, so large mono-repos can load a subset without opening Visual Studio.
- dotnet watch in .NET 11 Preview 3: Aspire hosts, crash recovery, and saner Ctrl+C
dotnet watch gains Aspire app host integration, automatic relaunch after crashes, and fixed Ctrl+C handling for Windows desktop apps in .NET 11 Preview 3.
- System.Text.Json in .NET 11 Preview 3 adds PascalCase and per-member naming policies
.NET 11 Preview 3 finishes the naming-policy story in System.Text.Json: JsonNamingPolicy.PascalCase, a member-level [JsonNamingPolicy] attribute, and a type-level [JsonIgnore] default for cleaner DTOs.
- EF Core 11 Adds GetEntriesForState to Skip DetectChanges
EF Core 11 Preview 3 introduces ChangeTracker.GetEntriesForState, a state-filtered enumerator that avoids an extra DetectChanges pass in hot paths like SaveChanges interceptors and audit hooks.
- .NET MAUI 11 Ships a Built-in LongPressGestureRecognizer
.NET MAUI 11 Preview 3 adds LongPressGestureRecognizer as a first-party gesture, with duration, movement threshold, state events, and command binding, replacing the common Community Toolkit behavior.
- Building a Microsecond-Latency Database Engine in C#
Loic Baumann's Typhon project targets 1-2 microsecond ACID commits using ref structs, hardware intrinsics, and pinned memory, proving C# can compete at the systems programming level.
- How Dapper's Default nvarchar Parameters Silently Kill Your SQL Server Indexes
C# strings sent through Dapper default to nvarchar(4000), forcing SQL Server into implicit conversions and full index scans. Here's how to fix it with DbType.AnsiString.
- GitHub Copilot Modernization: The Assessment Report Is the Actual Product
GitHub Copilot Modernization is pitched as an Assess, Plan, Execute loop for migrating legacy .NET apps. The assessment phase is where the value lives: an inventory report, categorized blockers, and file-level remediation guidance you can diff like code.
- Hot Reload Auto-Restart in Visual Studio 2026: Rude Edits Stop Killing Your Debug Session
Visual Studio 2026 adds HotReloadAutoRestart, a project-level opt-in that restarts the app when a rude edit would otherwise end the debug session. It is especially useful for Razor and Aspire projects.
- .NET 11 Adds Native Zstandard Compression to System.IO.Compression
.NET 11 Preview 1 ships ZstandardStream, ZstandardEncoder, and ZstandardDecoder in System.IO.Compression, giving you fast, inbox zstd support with no third-party packages.
- EF Core 11 Lets You Create and Apply a Migration in One Command
The dotnet ef database update command now accepts --add to scaffold and apply a migration in a single step. Here is how it works, why it matters for containers and .NET Aspire, and what to watch for.
- EF Core 11 Adds Native SQL Server Vector Search with 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.
- Rider 2026.1 Ships an ASM Viewer for JIT, ReadyToRun, and NativeAOT Output
Rider 2026.1 adds a .NET Disassembler plugin that lets you inspect machine code generated by the JIT, ReadyToRun, and NativeAOT compilers without leaving the IDE.
- ASP.NET Core 11 Ships Native OpenTelemetry Tracing: Drop the Extra NuGet Package
ASP.NET Core in .NET 11 Preview 2 adds OpenTelemetry semantic attributes directly to HTTP server activity, removing the need for OpenTelemetry.Instrumentation.AspNetCore.
- C# 15 Union Types Are Here: Type Unions Ship in .NET 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.
- Kestrel Drops Exceptions from Its HTTP/1.1 Parser in .NET 11
Kestrel's HTTP/1.1 request parser in .NET 11 replaces BadHttpRequestException with a result struct, cutting malformed-request overhead by up to 40%.
- Microsoft Agent Framework 1.0: Building AI Agents in Pure C#
Microsoft Agent Framework hits 1.0 with stable APIs, multi-provider connectors, multi-agent orchestration, and A2A/MCP interop. Here is what it looks like in practice on .NET 10.
- .NET 11 Runtime Async Replaces State Machines with 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.
- dotnet new webworker: first-class Web Workers for Blazor in .NET 11 Preview 2
A new project template in .NET 11 Preview 2 scaffolds the JS plumbing, WebWorkerClient, and JSExport boilerplate needed to run .NET code in a browser Web Worker.
2026 / 03
- Generative AI for Beginners .NET v2: Rebuilt for .NET 10 with Microsoft.Extensions.AI
Microsoft's free generative AI course for .NET developers ships Version 2, rebuilt for .NET 10 and migrated from Semantic Kernel to Microsoft.Extensions.AI's IChatClient pattern.
- What 878 Copilot Coding Agent PRs in dotnet/runtime Actually Look Like
The .NET team shares ten months of real data on running GitHub's Copilot Coding Agent in dotnet/runtime: 878 PRs, a 67.9% merge rate, and clear lessons on where AI-assisted development helps and where it still falls short.
2026 / 02
- C# 14 idea: interceptors could make System.Text.Json source generation feel automatic
A community discussion proposed using C# 14 interceptors to rewrite JsonSerializer calls so they automatically use a generated JsonSerializerContext, keeping AOT-friendly source generation with cleaner call sites.
- Polars.NET: a Rust DataFrame engine for .NET 10 that leans on LibraryImport
A new Polars.NET project is trending after a Feb 6, 2026 community post. The headline is simple: a .NET-friendly DataFrame API backed by Rust Polars, with a stable C ABI and LibraryImport-based interop to keep overhead low.
- .NET Framework 3.5 Goes Standalone on New Windows Builds: What Breaks
Starting with Windows 11 Build 27965, .NET Framework 3.5 is no longer an optional Windows component. Here is what breaks in CI, provisioning, and golden images, and how to fix it.
- TrailBase v0.23.7: A Single-Binary Firebase Alternative for .NET 10 and Flutter
TrailBase is an open-source, single-executable backend built on Rust, SQLite, and Wasmtime. Version 0.23.7 ships UI fixes and improved error handling.
2026 / 01
- NuGet “become owner” request spam: what to do (and what to lock down) in .NET 9/.NET 10
Defend your .NET packages against NuGet ownership request spam. Lock files, Package Source Mapping, and Central Package Management practices for .NET 9 and .NET 10.
- Scalar in ASP.NET Core: why your Bearer token is ignored (.NET 10)
If your Bearer token works in Postman but not in Scalar, the problem is likely your OpenAPI document. Here is how to declare a proper security scheme in .NET 10.
- TreatWarningsAsErrors without sabotaging dev builds (.NET 10)
How to enforce TreatWarningsAsErrors in Release builds and CI while keeping Debug flexible for local development in .NET 10, using Directory.Build.props.
- Perfetto + dotnet-trace: a practical profiling loop for .NET 9/.NET 10
A practical profiling loop for .NET 9 and .NET 10: capture traces with dotnet-trace, visualize them in Perfetto, and iterate on CPU, GC, and thread pool issues.
- A WinUI 3 “local-only notes” app is the right kind of boring: offline-first, SQLite, keyboard-first
Miyanyedi Quick Note is a WinUI 3 + SQLite note-taking app that is offline-first and privacy-friendly. Here is why local-only is a feature, plus a minimal SQLite snippet for .NET 8 desktop apps.
- An open-source WPF SSH manager shows a practical pattern: xterm.js in WebView2, secrets via DPAPI
SshManager is an open-source WPF SSH manager built on .NET 8. It shows a practical pattern: xterm.js inside WebView2 for terminal rendering, EF Core + SQLite for persistence, and DPAPI for local credential protection.
- CV Shortlist: an AI-powered .NET 10 SaaS went open-source, and the stack is worth studying
CV Shortlist is an open-source .NET 10 SaaS that pairs Azure Document Intelligence with an OpenAI model. The stack, config discipline, and AI integration boundary are worth studying.
- ModularPipelines V3: write CI pipelines in C#, debug locally, stop babysitting YAML
ModularPipelines V3 lets you write CI pipelines in C# instead of YAML. Run them locally with dotnet run, get compile-time safety, and debug with breakpoints.
- Deploy a .NET App with Podman + systemd: Stable Restarts, Real Logs, No Magic
Deploy .NET 9 and .NET 10 services on a Linux VM using Podman and systemd. Get stable restarts, real logs via journald, and a containerized app managed like a proper service -- no Kubernetes required.
- gRPC in Containers Feels “Hard” in .NET 9 and .NET 10: 4 Traps You Can Fix
Four common traps when hosting gRPC in containers with .NET 9 and .NET 10: HTTP/2 protocol mismatches, TLS termination confusion, broken health checks, and proxy misconfiguration -- with fixes for each.
- Microsoft `mcp`: Wiring Model Context Protocol Servers from C# on .NET 10
How to wire Model Context Protocol (MCP) servers in C# on .NET 10 using microsoft/mcp. Covers tool contracts, input validation, auth, observability, and production-readiness patterns.
- Monitor Background Jobs in .NET 9 and .NET 10 Without Hangfire: Health + Metrics + Alerts
Monitor BackgroundService jobs in .NET 9 and .NET 10 without Hangfire using heartbeat health checks, duration metrics, and failure alerts with a practical code example.
- .NET 10 file-based apps just got multi-file scripts: `#:include` is landing
.NET 10 adds #:include support for file-based apps, letting dotnet run scripts span multiple .cs files without creating a full project.
- SBOM for .NET in Docker: stop trying to force one tool to see everything
How to track NuGet dependencies and container OS packages for a .NET Docker image using CycloneDX, Syft, and Dependency-Track -- and why one SBOM is not enough.
- System.CommandLine v2, but with the wiring done for you: `Albatross.CommandLine` v8
Albatross.CommandLine v8 builds on System.CommandLine v2 with a source generator, DI integration, and hosting layer to eliminate CLI boilerplate in .NET 9 and .NET 10 apps.
- Wave-IDE in 2026: the minimum Roslyn plumbing behind a WinForms IDE on .NET 10
Wave-IDE shows that WinForms and Roslyn on .NET 10 are enough to build a working C# IDE. Here is the minimum plumbing for incremental analysis, completion, and diagnostics.
- AWS Lambda Supports .NET 10: What to Verify Before You Flip the Runtime
AWS Lambda now supports .NET 10, but the runtime upgrade is not the hard part. Here is a practical checklist covering cold starts, trimming, native AOT, and deployment shape.
- .NET 10 made your NIC list explode? Filtering GetAllNetworkInterfaces() without lying to yourself
How to filter GetAllNetworkInterfaces() in .NET 10 when virtual adapters from Hyper-V, Docker, WSL, and VPNs flood the list. Includes a two-stage filter with explicit tradeoffs.
- Queryable Encryption + Vector Search in the MongoDB EF Core Provider (and why it matters for .NET 9 and .NET 10)
The MongoDB EF Core provider now supports Queryable Encryption and vector search. Here is what that means for .NET 9 and .NET 10 apps that already use EF Core.
- SwitchMediator v3: A Zero-Alloc Mediator That Stays Friendly to AOT
SwitchMediator v3 targets zero-allocation, AOT-friendly dispatch for .NET 9 and .NET 10 CQRS services. Here is what that means and how to benchmark your own mediator.
- .NET 10 Performance: SearchValues
Use SearchValues in .NET 10 for high-performance multi-string searching. Replaces foreach loops with SIMD-accelerated matching using Aho-Corasick and Teddy algorithms.
- Streaming Tasks with .NET 9 Task.WhenEach
.NET 9 introduces Task.WhenEach, which returns an IAsyncEnumerable of tasks as they complete. Here is how it simplifies processing parallel results as they arrive.
- C# 13: The End of `params` Allocations
C# 13 finally eliminates the hidden array allocation behind params. You can now use params with Span, ReadOnlySpan, List, and other collection types for zero-allocation variadic methods.
- .NET 9: The End of lock(object)
.NET 9 introduces System.Threading.Lock, a dedicated lightweight synchronization primitive that replaces lock(object) with better performance and clearer intent.
- Optimizing Frequency Counting with LINQ CountBy
Replace GroupBy with CountBy in .NET 9 for cleaner, more efficient frequency counting. Reduces allocations from O(N) to O(K) by skipping intermediate grouping structures.
2025 / 04
- .NET 10: Stack allocation of arrays of value types
In .NET 10, the JIT can stack-allocate small fixed-size arrays of value types, eliminating heap allocations and delivering up to 60% faster performance compared to .NET 9.
- What’s new in .NET MAUI 10
A summary of new features, improvements, and breaking changes in .NET MAUI 10, released with .NET 10 and C# 14 in November 2025.
- How to change SearchBar’s icon color in .NET MAUI
How to change the SearchBar icon color in .NET MAUI using the new SearchIconColor property introduced in .NET 10.
- C# 14: Simplified parameters with modifiers in lambdas
C# 14 allows using ref, out, in, scoped, and ref readonly modifiers on implicitly typed lambda parameters, eliminating the need to explicitly declare parameter types.
- Partial constructors and events in C# 14
C# 14 lets you declare instance constructors and events as partial members, splitting definitions across files for cleaner code generation and separation of concerns.
- C# 14: nameof support for unbound generic types
C# 14 enhances the nameof expression to support unbound generic types like List<> and Dictionary<,>, eliminating the need for placeholder type arguments.
- Implicit Span conversions in C# 14 – First-class support for Span and ReadOnlySpan
C# 14 adds built-in implicit conversions between Span, ReadOnlySpan, arrays, and strings, enabling cleaner APIs, better type inference, and fewer manual AsSpan() calls.
- .NET 10: Array Enumeration Performance Improvements (JIT Array De-Abstraction)
In .NET 10, the JIT compiler reduces the overhead of iterating arrays through interfaces. See benchmarks comparing .NET 9 vs .NET 10 with foreach, IEnumerable, and conditional escape analysis.
- C# 14 – The field keyword and field-backed properties
C# 14 introduces the field contextual keyword for property accessors, letting you add custom logic to auto-properties without declaring a separate backing field.
2025 / 01
- .NET Performance: ToList vs ToArray
.NET 9 significantly improves ToArray performance using InlineArray, making it faster and more memory-efficient than ToList. See benchmarks comparing .NET 8 vs .NET 9.
- C# 13: Use params collections with any recognized collection type
C# 13 extends the params modifier beyond arrays to support Span, ReadOnlySpan, IEnumerable, and other collection types, reducing boilerplate and improving flexibility.
- How to switch to C# 13
How to fix 'Feature is not available in C# 12.0' and switch your project to C# 13 by changing the target framework or setting LangVersion in your .csproj file.
2024 / 12
- What’s new in C# 14.0
A summary of all new features in C# 14.0, including the field keyword, extension members, null-conditional assignment, implicit span conversions, and more.
- C# language version history
The evolution of C# has transformed it into a modern, high-performance language. This guide tracks every major milestone. The Early Years (C# 1.0 – 1.2) C# launched in 2002 as a primary language for the .NET Framework. It felt like Java but with a focus on Windows development. Version 1.2 arrived shortly after with small…
- What’s new in .NET 10
What's new in .NET 10: LTS release with 3 years of support, new JIT optimizations, array devirtualization, stack allocation improvements, and more.
2024 / 04
- .NET 8 performance: Dictionary vs. FrozenDictionary
With .NET 8 we are introduced to a new dictionary type which improves the performance of read operations. The catch: you are not allowed to make any changes to the keys and values once the collection is created. This type is particularly useful for collections that are populated on first use and then persisted for…
2023 / 11
- How to: Add AdMob to your MAUI app
Learn how to display AdMob banner ads in your .NET MAUI app on both Android and iOS, with step-by-step setup and platform-specific handler implementations.
- Getting started with .NET Aspire
A step-by-step guide to building your first .NET Aspire application, covering project structure, service discovery, and the Aspire dashboard.
- How to install .NET Aspire
Learn how to install the prerequisites for .NET Aspire development: .NET 8, the Aspire workload, and Docker Desktop.
- What is .NET Aspire?
An overview of .NET Aspire, the cloud-oriented framework for building scalable distributed applications, covering orchestration, components, and tooling.
- C# Randomly choose items from a list
In C#, you can randomly select items from a list using Random.GetItems, a method introduced in .NET 8. Learn how it works with practical examples.
- How to publish container as tar.gz in .NET
Learn how to publish a .NET 8 container as a tar.gz archive using the ContainerArchiveOutputPath property with dotnet publish.
- MAUI: How to register handlers in a library
Learn how to register view handlers and services from within a .NET MAUI library using the builder pattern and MauiAppBuilder extension methods.
- How to fix: ‘Point’ does not have a predefined size, therefore sizeof can only be used in an unsafe context
Fix the C# error where sizeof cannot be used with Point outside an unsafe context. Two solutions: enabling unsafe code or using Marshal.SizeOf instead.
- C# Access private property backing field using Unsafe Accessor
Use UnsafeAccessorAttribute in .NET 8 to access auto-generated backing fields of private auto-properties in C# without reflection.
- C# ZIP files to Stream
.NET 8 includes new CreateFromDirectory and ExtractToDirectory overloads that let you create and extract ZIP files directly to and from a Stream, without writing to disk.
- .NET 8 performance: 10x faster GetGenericTypeDefinition
Benchmarking GetGenericTypeDefinition in .NET 8 vs .NET 7 shows nearly 10x faster performance. See benchmark code and results using BenchmarkDotNet.
- How to take a screenshot in .NET core
Learn how to capture a screenshot of your entire desktop from a .NET console application using System.Windows.Forms. Windows-only solution covering all displays.
- C# How to update a readonly field using UnsafeAccessor
Learn how to update a readonly field in C# using UnsafeAccessor, an alternative to reflection without the performance penalty. Available in .NET 8.
- .NET 8 Performance: UnsafeAccessor vs. Reflection
Benchmarking UnsafeAccessor vs Reflection in .NET 8. See how UnsafeAccessor achieves zero-overhead performance compared to traditional reflection.
2023 / 10
- How to access private members without reflection in C#
Learn how to access private members in C# without reflection using the UnsafeAccessor attribute introduced in .NET 8, with zero overhead.
- C# – How to mark features as experimental
Starting with C# 12, a new ExperimentalAttribute lets you mark types, methods, properties, or assemblies as experimental. Learn how to use it with diagnosticId, pragma tags, and UrlFormat.
- C# – ref readonly parameters
The ref readonly modifier in C# provides a more transparent way of passing read-only references. Learn how it improves on the in modifier with better constraints and caller visibility.
- C# – How to shuffle an array?
The easiest way to shuffle an array in C# is using Random.Shuffle, introduced in .NET 8. It works in-place on both arrays and spans.
- System.Text.Json – How to modify existing type info resolver
Use the new WithAddedModifier extension method in .NET 8 to easily modify any IJsonTypeInfoResolver serialization contract without creating a new resolver from scratch.
- HttpClient get JSON as AsyncEnumerable
The new GetFromJsonAsAsyncEnumerable extension method in .NET 8 deserializes HTTP response JSON into an IAsyncEnumerable. Learn how to use it with await foreach.
- JsonNode – .NET 8 API updates
Explore the new .NET 8 API additions to JsonNode and JsonArray, including GetValueKind, GetPropertyName, GetElementIndex, ReplaceWith, and ParseAsync.
- Deep cloning and deep equality of a JsonNode
Learn how to use the new DeepClone() and DeepEquals() methods on JsonNode in .NET 8 for deep cloning and comparing JSON nodes.
- System.Text.Json – Disable reflection-based serialization
Learn how to disable reflection-based serialization in System.Text.Json starting with .NET 8 for trimmed and native AOT applications using the JsonSerializerIsReflectionEnabledByDefault property.
- Add/Remove TypeInfoResolver to existing JsonSerializerOptions
Learn how to add or remove TypeInfoResolver instances on existing JsonSerializerOptions using the new TypeInfoResolverChain property in .NET 8.
- WPF – Prevent file dialog selection from being added to recents
Prevent WPF file dialog selections from appearing in Windows Explorer recents and the Start Menu by setting AddToRecent to false in .NET 8.
- WPF – Individual dialog states using ClientGuid
Use the ClientGuid property in .NET 8 to persist individual dialog states like window size, position, and last used folder across WPF file dialogs.
- C# 12 – Interceptors
Learn about C# 12 interceptors, an experimental .NET 8 compiler feature that lets you replace method calls at compile time using the InterceptsLocation attribute.
- WPF – Limit OpenFileDialog folder tree to a certain folder
Learn how to constrain the WPF OpenFileDialog folder tree to a specific root folder using the RootDirectory property in .NET 8.
- WPF hardware acceleration in RDP
Learn how to enable WPF hardware acceleration over RDP in .NET 8 for improved performance and a more responsive remote desktop experience.
- WPF Open Folder Dialog
Learn how to use the new OpenFolderDialog in WPF with .NET 8 to let users browse and select one or multiple folders.
2023 / 09
- Implementation type Data.AppDbContext can’t be converted to service type Microsoft.AspNetCore.Identity.IUserStore
Fix the ASP.NET Core Identity error where AppDbContext can't be converted to IUserStore by adding AddEntityFrameworkStores to your identity configuration.
- .NET 8 – Serializing properties from interface hierarchies
.NET 8 adds support for serializing properties from interface hierarchies, including all properties from all interfaces depending on the declared variable type.
- .NET 8 – Deserialize into non-public properties
Learn how to deserialize JSON into non-public properties in .NET 8 using the JsonInclude attribute and parameterized constructors.
- .NET 8 – How to use JsonStringEnumConverter with native AOT
Learn how to use the new JsonStringEnumConverter<TEnum> in .NET 8 for native AOT-compatible enum serialization with System.Text.Json.
- The type or namespace name InterceptsLocationAttribute could not be found
How to fix error CS0246 for InterceptsLocationAttribute in C# interceptors by defining the attribute yourself.
- .NET 8 – Mark JsonSerializerOptions as readonly
Learn how to mark JsonSerializerOptions instances as read-only in .NET 8 using MakeReadOnly, and how to check the IsReadOnly property.
- .NET 8 – Serialization of Half, Int128, and UInt128
System.Text.Json in .NET 8 adds built-in serialization support for the Half, Int128, and UInt128 numeric types.
- .NET 8 – Memory<byte> is serialized as base64
Starting with .NET 8, both Memory<byte> and ReadOnlyMemory<byte> are serialized as Base64 strings, while other types like Memory<int> remain JSON arrays.
- .NET 8 – Include non-public members in JSON serialization
Learn how to include private, protected, and internal properties in JSON serialization in .NET 8 using the JsonInclude attribute.
- dotnet workload clean
Learn how to use dotnet workload clean in .NET 8 to remove leftover workload packs after SDK or Visual Studio updates.
- .NET 8 – Deserialize into read-only properties
Learn how to deserialize JSON into read-only properties without a setter in .NET 8 using JsonObjectCreationHandling or JsonSerializerOptions.
- .NET 8 – Handle missing members during JSON deserialization
Learn how to throw exceptions for unmapped JSON properties during deserialization in .NET 8 using JsonUnmappedMemberHandling.
2023 / 08
- How to install dotnet script
dotnet script enables you to run C# scripts (.CSX) from the .NET CLI. The only requirement is to have .NET 6 or newer installed on your machine. You can use the following command to install dotnet-script globally: Then to execute a script file you simply call dotnet script <file_path> like in the example below: How…
- C# How to wait for a process to end?
You can use the WaitForExit method to wait for the process to complete. Your code will wait synchronously for the process to finish, then it will resume execution. Let’s look at an example: The code above will start a new cmd.exe process, and execute the timeout 5 command. The process.WaitForExit() call will force your program…
- .NET 8 – JSON serialize property names using snake case and kebab case
Learn how to use the new snake_case and kebab-case JSON naming policies introduced in .NET 8 with System.Text.Json.
2023 / 06
- dotnet new api -aot: ‘-aot’ is not a valid option
Fix the '-aot is not a valid option' error by using the correct double-hyphen syntax: dotnet new api --aot.
- How to start programming with C#
A beginner's guide to getting started with C# programming, from setting up Visual Studio to writing your first program and finding learning resources.
- What’s new in .NET 8
.NET 8 was released on November 14, 2023 as an LTS (Long Term Support) version, meaning it will continue to receive support, updates, and bug fixes for at least three years from its release date. As usual, .NET 8 brings support for a new version of the C# language, namely C# 12. Check out our dedicated page…