.NET 11 RC1 was released on September 8, 2026. It is a Go-Live release, so teams can use it in production while preparing for the final .NET 11 release, which is scheduled for November 10, 2026.
That does not mean an existing application can simply change TargetFramework and be considered migrated. The risky part of a .NET upgrade is usually not getting the application to compile. It is finding the places where the new runtime, SDK, libraries, ASP.NET Core behavior, or deployment environment changes how the application behaves.
To migrate to .NET 11 RC1, I would test the application in this order: build compatibility, dependency compatibility, runtime behavior, application-specific workloads, deployment, and production-like performance.
1. Create a Clean Baseline First
Before changing the target framework, record how the application behaves on its current .NET version.
At minimum, capture:
Build and test results
Application startup time
API response times for important endpoints
Memory usage
CPU usage
Database connection behavior
Background job behavior
Logging and telemetry
Container startup behavior, if applicable
This gives you something to compare against after the migration.
Run the existing test suite before changing anything:
dotnet restore
dotnet build --configuration Release
dotnet test --configuration ReleaseDo not skip this step. If tests are already failing before the migration, you will have a much harder time deciding whether a failure is caused by .NET 11.
2. Test the Application Against .NET 11 RC1
Install the .NET 11 RC1 SDK and change the target framework in the project file.
For an application currently targeting .NET 10:
<PropertyGroup>
<TargetFramework>net11.0</TargetFramework>
</PropertyGroup>If the repository uses global.json, check that it is selecting the SDK you intend to test.
For example:
{
"sdk": {
"version": "11.0.100-rc.1"
}
}Use the actual SDK version installed in your environment rather than copying a version number from an example.
Then verify the SDK:
dotnet --info
dotnet --list-sdksBuild the application again:
dotnet clean
dotnet restore
dotnet build --configuration ReleaseTreat every new warning as something to investigate. A successful build only proves that the compiler accepted the code. It does not prove that the application will behave the same way at runtime.
3. Check .NET 11 Breaking Changes
This should be one of the first migration checks, not something done after production testing.
Microsoft's .NET 11 compatibility documentation currently lists changes across ASP.NET Core, .NET libraries, cryptography, deployment, networking, JIT, SDK/MSBuild, and other areas. Microsoft also classifies changes as binary incompatible, source incompatible, or behavioral.
Some changes are easy to miss because the application still compiles.
For example, .NET 11 changes the minimum x86/x64 hardware baseline to x86-64-v2. An application running on older hardware can fail to start because the processor does not provide the required instruction sets. ReadyToRun targets have also changed.
If your application runs on older servers, VMs, or unusual infrastructure, verify the CPU capabilities before deployment.
4. Test ASP.NET Core Applications Separately
ASP.NET Core applications need their own compatibility pass.
The ASP.NET Core 11 breaking-change list includes changes to Kestrel, OpenAPI, response compression, Blazor, authentication, middleware, and package dependencies.
For example, Microsoft.OpenApi has moved to version 3.x, which can create source compatibility issues for applications that directly use OpenAPI types. The ConcurrencyLimiter middleware has also been removed.
Check:
Controllers and Minimal APIs
Authentication and authorization
Middleware ordering
Exception handling
OpenAPI/Swagger generation
Response compression
HTTPS and TLS
WebSockets and SignalR
Health checks
Static files
Blazor components, if used
Then exercise real API requests rather than relying only on unit tests.
A simple smoke-test sequence might be:
GET /health
POST /api/auth/login
GET /api/products
POST /api/orders
GET /api/orders/{id}Test both successful requests and expected failures.
5. Test .NET Library Behavior, Not Just Compilation
Several .NET 11 changes affect runtime behavior.
For example, DateOnly.TryParse and TimeOnly.TryParse can now throw for invalid input. ZIP processing adds CRC32 validation, and ZipArchive.CreateAsync changes how archive entries are loaded. IHost.RunAsync and IHost.StopAsync also have changed behavior when a BackgroundService fails.
These changes matter because existing tests may not cover unusual input or failure paths.
If your application processes dates supplied by users, test invalid values:
var result = DateOnly.TryParse(
input,
out var date);Do not assume that code which behaved a certain way on the previous runtime will behave identically on .NET 11.
The same applies to:
File processing
ZIP/TAR handling
Background services
Networking
Cryptography
Reflection
Serialization
Interop
Globalization
6. Test Background Services and Hosted Applications
Applications using BackgroundService deserve specific testing.
Create a test scenario where a background worker throws an exception and verify what your application does next.
Check:
Does the host remain running?
Is the failure logged?
Is the worker restarted?
Does the application shut down?
Does your monitoring system detect the failure?
Are messages or jobs left in an inconsistent state?
This matters because .NET 11 changes the behavior of IHost.RunAsync and IHost.StopAsync when a BackgroundService fails.
If your application relies heavily on hosted workers, this should be part of the migration test plan.
Join the conversation! Your thoughts help the community grow.