Running Optimizely CMS on .NET 11 Preview

Unlocking .NET 11 Runtime Gains Early

Posted by Stuart Greig on April 15, 2026.net CMS Optimizely 

.NET 11 is the next Long-Term Support (LTS) release of the .NET platform, bringing meaningful performance gains, new language features, and better cloud-native tooling. If you're running an Optimizely CMS site and you want to live on the bleeding edge, it's surprisingly straightforward to get everything running on a .NET 11 preview SDK today. Here's exactly how I did it with the Alloy sample site.

Prerequisites

Enable Preview SDKs in Visual Studio

By default Visual Studio only resolves release SDKs. To allow it to load and build against a preview SDK:

  • Go to Tools → Options → Environment → Preview Features.

  • Enable Use previews of the .NET SDK (requires restart).

  • Restart Visual Studio.

Alternatively, pin the SDK version at the solution root with a 'global.json' so the CLI always picks the correct preview build:

{
  "sdk": {
    "version": "11.0.100-preview.3.25201.16",
    "rollForward": "latestMinor",
    "allowPrerelease": true
  }
}

Code Changes

That's the whole point of this post the change is one line in your '.csproj'

Open your .csproj and change the <TargetFramework> element

<PropertyGroup>
  <TargetFramework>net11.0</TargetFramework>
  <Nullable>disable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Restore, build, and run. The site starts up on .NET 11 with no other changes required.

Why Bother?

What's New in .NET 11 Targeting a preview SDK purely to be on the cutting edge needs a payoff. Here are the .NET 11 improvements that are most relevant to an Optimizely CMS workload.

JIT and PGO improvements

Faster cold start .NET 9 shipped Profile-Guided Optimisation (PGO) enabled by default. .NET 10 and 11 continue to tune it. For a CMS application which does a large amount of work at startup (dependency injection container build, content model scanning, route registration) a lower cold-start time directly improves developer feedback loops and container restart speed in production. For example if you're running in a load balanced enviroment new servers starting up will start a lot quicker

Improved async/await state machine codegen

The runtime team has continued reducing allocations in the async state machine. Optimizely content delivery pipelines are heavily async so fewer allocations means lower GC pressure and more consistent response times.

System.Text.Json v11 

Source generation improvements Optimizely's serialisation layer and any custom converters you write benefit from faster, allocation-free JSON serialisation through the improved source generator in .NET 11. This is particularly relevant if you use the headless/content delivery API layer

Enhanced Span<T> and MemoryMarshal APIs

Continued improvements to low-level memory APIs benefit high-throughput scenarios like search index ingestion and bulk content import, where you need to move large amounts of data with minimal allocation.

A full breakdown of whats coming in .net 11 can be found here https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-11/overview 

Should I upgrade?

Probably not, preview SDKs are not supported for production by Microsoft or Optimizely. Running on .NET 11 preview today is appropriate for:

  • Personal labs and demo sites

  • Evaluating new language or runtime features before they ship.

  • Writing blog posts 😉

When .NET 11 reaches GA (expected November 2026), it will become an LTS release supported for three years. That's the right time to migrate production Optimizely workloads if you need any of the .NET 11 features for your builds. 

Want to see my full CV and portfolio?