.NET › .NET vs .NET Framework

How does language version support differ between .NET Framework and modern .NET, specifically regarding C# language features?

Intermediate

Answer

The C# language version is technically decoupled from the runtime, but practically, .NET Framework projects are typically capped at older C# language versions (commonly C# 7.3 without extra configuration) due to compiler and runtime feature dependencies, while modern .NET projects can freely use the latest C# version (e.g., C# 12/13) with all its newer syntax (records, pattern matching, required members, primary constructors) since Microsoft continuously updates the Roslyn compiler independent of runtime versions -- but some newer syntax also depends on runtime library support only available in modern .NET.
<!-- Framework project: often capped without explicit override -->
<LangVersion>7.3</LangVersion>

<!-- Modern .NET project: latest language features available -->
<LangVersion>latest</LangVersion>
<!-- Enables records, required members, primary constructors, etc. -->
Real-world example A team stuck on .NET Framework 4.8 can't use C# 9's record types because the required runtime support isn't present, becoming a concrete motivating example for migration beyond just performance concerns.

Common follow-ups: Which specific C# features require runtime support versus being purely compiler-level?;How would you force a newer LangVersion on a Framework project?