Check C# Version: A Quick Guide to Your Compiler Version

5/5 - (2 votes)

C# has evolved significantly since its inception, with each version introducing new language features and improvements, which makes version detection an important aspect of development.

You can detect the C# version you are using in various ways, such as examining your project file or using specific command line tools.

C# Version Fundamentals

Visual Studio and C# Versions

Visual Studio plays an essential role in determining the C# version you’re using πŸ”§. Typically, you’d be working with the latest installed version, based on the .NET framework supported by your current Visual Studio version.

To check or change the C# version, navigate to the advanced build settings in your project (Project > Properties > Build) πŸ‘©β€πŸ’». There, you’ll see all the C# versions available, including the latest language version.

This may not apply anymore – depending on your concrete environment. If not, check out this document:

The latest C# compiler determines a default language version based on your project's target framework or frameworks. Visual Studio doesn't provide a UI to change the value, but you can change it by editing the csproj file. The choice of default ensures that you use the latest language version compatible with your target framework. You benefit from access to the latest language features compatible with your project's target. This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors.
argetVersionC# language version default
.NET7.xC# 11
.NET6.xC# 10
.NET5.xC# 9.0
.NET Core3.xC# 8.0
.NET Core2.xC# 7.3
.NET Standard2.1C# 8.0
.NET Standard2.0C# 7.3
.NET Standard1.xC# 7.3
.NET FrameworkallC# 7.3

Alternatively, you can also type in the developer cmd prompt obtained via Visual Studio > View > Terminal:

csc -langversion:?

This will display all C# versions supported including the ones that are currently the default. See here: πŸ‘‡

7.0 (default)
7.3 (latest)

.NET Framework and C# Versioning

C# versions are closely tied to the .NET Framework. In fact, each C# release usually corresponds to a .NET Framework version:

  • C# 1.0 with .NET 1.0
  • C# 1.2 with .NET 1.1
  • C# 2.0 with .NET 2.0
  • C# 3.0 with .NET 3.5

… and so on (source).

When developing applications, it is crucial to consider your target .NET Framework version, as it directly impacts the language’s version, features, and behavior.

.NET Core and C# Versioning

With .NET Core 🌐, versioning becomes more flexible. Each .NET SDK version comes with a specific C# language version, allowing you to use newer C# features in your projects. However, the default language version depends on your project’s target framework(s). You can find and change this value by editing the csproj file πŸ’».

As an example, .NET Core 3.1 uses C# 8.0 by default, .NET 5 supports C# 9.0, and .NET 6 works with C# 10.0. By targeting a specific .NET SDK version, you’ll also have access to different runtime features ⚑ and CLR (Common Language Runtime) enhancements.

By understanding these three key topics: Visual Studio, .NET Framework, and .NET Core versioning, you’ll be better equipped to work effectively with C# and utilize its features to the fullest πŸš€.

Detecting C# Version

When working with C# projects, it’s important to know the version of the language you are using. There are two common methods to detect the C# version: in Visual Studio and using the command line.

Checking C# Version in Visual Studio

In Visual Studio, you can easily check the C# version by inspecting the project properties. Follow these steps:

  1. Right-click on your project in the Solution Explorer.
  2. Select Properties.
  3. Navigate to the Build tab.
  4. Click on the Advanced button at the bottom of the Build tab.
  5. In the Language version dropdown, you can see the current C# version used in your project. πŸ”

Keep in mind that the C# version is tied to the .NET Framework or .NET Core version you are targeting. For example, C# 7.0 is available starting from .NET Framework 4.7 and .NET Core 2.0.

Using the Command Line

Another option to detect the C# version is by using the command line. You can find the .NET runtime version in your computer by running the following command: πŸ’»

dotnet --list-runtimes

This command shows the installed .NET runtime versions, which you can use to determine the available C# versions. You can also check the available SDKs with:

dotnet --list-sdks

To find the C# version of a specific project, you can inspect the .csproj file and look for the <LangVersion> tag, which resembles:


In this example, the C# version is 8.0.

Additionally, you can retrieve the current environment’s C# compiler version in your code using the Environment.Version property:

using System;

namespace ConsoleApp1
    class Program
        static void Main(string[] args)
            Version version = Environment.Version;
            Console.WriteLine($"C# compiler version: {version}");

Remember that forward compatibility is not guaranteed. It’s essential to use the appropriate C# version for your project to ensure smooth development and deployment. πŸ› οΈ

By leveraging these techniques, you can confidently detect the C# version used in your projects and ensure compatibility with your target runtime and environment. 🌟

C# Version Management

Managing the C# version in a project is essential to ensure compatibility with different environments, as well as to make use of the latest language features. In this section, we will discuss configuring language versions through the project file and understanding the language version syntax.

Project File and csproj Configuration

The C# version used in a project depends on the target framework specified in the .csproj file. This file contains configurations related to the build process, such as the targeted operating system version and framework.πŸ”§ To define a specific C# language version, edit your .csproj file and add the following snippet:


Replace “your_version_here” with the desired C# version number (e.g., “9.0” for C# 9.0). This way, Visual Studio will use the specified version during the build process.

Language Version Syntax

C# offers a variety of language version syntax options, enabling different levels of support for language features. Here are some common options:

latestUse the latest supported language version
previewUse the latest preview language version, if available
defaultUse the default language version for the target framework
{major.minor}Use a specific major and minor version (e.g., “7.3”)

By specifying the language version in the .csproj file, you can have better control over which language features are available during the compile time. This can help avoid potential errorsπŸ’‘ and ensure that language features like nullable reference types or top-level statements are supported.

In conclusion, managing the C# version in your project is crucial to provide compatibility and flexibility. Configuring the version through the .csproj file, combined with understanding the available language version syntax, enables you to confidently develop projects with the desired feature set while maintaining optimal compatibility.πŸ› οΈ

C# Language Features by Version

Major C# Versions and Features

C# 1.0, released with .NET 1.0, introduced the foundation of the language, including basic types such as integers, classes, and methods, along with language constructs like if, for, and foreach loops 😊. It also defined exception handling through try, catch, and finally blocks.

With C# 2.0, which came alongside .NET 2.0, the language received significant improvements, such as:

  • Generics πŸ“: Allowing developers to create type-safe code with better performance, as well as reducing the need for casting and boxing.
  • Partial classes: Useful for separating complex classes, as well as code-generation scenarios.
  • Anonymous methods: The ability to define inline methods, mainly used as delegates.

C# 3.0 followed next, bundled with .NET 3.5, and introduced features to support the Language Integrated Query (LINQ), such as:

  • Lambda expressions (input) => expression: Shorter and more expressive way of writing lambdas and delegates.
  • Extension methods: Augmenting existing types without modifying them.
  • Language Integrated Query (LINQ): A set of query capabilities to process data from any source, including in-memory collections, databases, and XML.

C# 4.0 came with .NET 4 and had a focus on handling data and interoperability:

  • Dynamic: The dynamic keyword enables easier interop with COM and dynamic languages.
  • Named and optional arguments: Simplifies code readability and method invocation flexibility.
  • Covariant and contravariant generic type parameters: Enhancing general functionality with generics.

C# 5.0, found in .NET 4.5, made asynchronous programming more accessible:

  • Async and await: These constructs enable writing asynchronous code in a more readable and maintainable way.

C# 6.0 brought syntactic sugar features that reduce boilerplate code and improve readability, such as:

  • Expression-bodied members: A concise way of defining simple properties or methods.
  • String interpolation: Interpolated strings ( $”{expression}” ) allow embedding expressions directly into a string.
  • nameof expression: Returns the name of a code element, reducing the risk of using a string literal.

Finally, C# 7.0 up to the latest version have introduced even more features designed to enhance productivity and code safety, such as pattern matching, tuples, and the Span<char> type πŸš€. The rapid evolution and development of the C# language has provided developers with a rich set of features for diverse scenarios, all while maintaining a clear and modern syntax.

Understanding .NET Assemblies and Runtimes

Assemblies in .NET Core and .NET 5

Assemblies are the building blocks of .NET applications, taking the form of executable (.exe) or dynamic link library (.dll) files. They provide the common language runtime with the information it needs to be aware of type implementations.

In .NET Core and .NET 5, assemblies are organized into three main folders: Microsoft.AspNetCore.App, Microsoft.NETCore.App, and Microsoft.WindowsDesktop.App. (source)

πŸ“ Microsoft.AspNetCore.App: Contains the assemblies for building web applications using ASP.NET Core.

πŸ“ Microsoft.NETCore.App: Houses the core assemblies that form the .NET runtime.

πŸ“ Microsoft.WindowsDesktop.App: Includes the assemblies necessary for building desktop applications with WPF or Windows Forms.

Language Versioning and Runtime Compatibility

The .NET runtime and SDK tools are updated at different frequencies, with the SDK generally receiving updates more often than the runtime. (source)

To accommodate this, Microsoft employs semantic versioning for both the runtime and SDK. Semantic versioning is a convention that uses a three-part version number (MAJOR.MINOR.PATCH) to convey the development state of a software product:

  • MAJOR: Indicates breaking changes
  • MINOR: Represents new features without breaking changes
  • PATCH: Denotes bug fixes, security fixes, and other small improvements

When working with .NET, it’s crucial to understand that each language version is tied to a specific runtime version. For example, a C# 9.0 feature might not be supported on an older .NET Core 3.1 runtime.

In terms of runtime compatibility, Microsoft ensures that a higher runtime version will always be compatible with an application built on a lower version (source). This means if your application is built on .NET Core 3.1, it should work seamlessly on a machine with .NET 5 installed.

To summarize, understanding .NET assemblies and runtimes is vital for successful .NET development. A clear comprehension of how assemblies are organized, as well as the language versioning and runtime compatibility, will enable you to create robust and compatible software that scales with the .NET ecosystem.

Miscellaneous C# Version Resources

In this section, we will explore various resources and methods to check the C# version in different platforms and environments like Visual Studio for Mac and Terminal. πŸ› οΈ

If you are using Visual Studio for Mac πŸ–₯️, you can check the C# version by right-clicking on the project in the Solution Explorer and selecting “Options.” Navigate to “Build > General” section, and you will find the “C# Language Version” dropdown, where you can see the currently used version. This also allows you to change the version if necessary.

In case you are working with the Terminal ⌨️, you may want to leverage dotnet command-line tools to help check the C# version. To do this, type dotnet --list-sdks to see the installed versions of .NET SDKs.

The C# version is closely related to the SDK version. You can refer to the C# Guide by Microsoft Learn to find information on the correspondence between the .NET framework and C# versions.

Another way to check the C# version in your projects is to look directly at the .csproj file. There, you can find <LangVersion> tag, which indicates the C# version. For instance: <LangVersion>9.0</LangVersion> for C# 9.0. If the tag is not present, it uses the default version based on the target framework. You can add this tag to change the C# version as well.

For example, to set the version to C# 10.0, you can add the following to your .csproj file:


Frequently Asked Questions

How can I find the C# version in my project?

To find the C# version in your project, you can check the project file. In the .csproj file, you can look for the <LangVersion> tag. The number between the <LangVersion> tags represents your C# version. For example:


In this example, the C# version is 7.0.

What is the latest C# version available?

As of June 23, 2023, the latest C# version available is C# 10. To find the most up-to-date information on C# version releases, you can check the Microsoft C# guide.

Which C# version corresponds to .NET Core 3.1?

The C# version corresponding to .NET Core 3.1 is C# 8.0. Keep in mind that newer C# versions might also be compatible with .NET Core 3.1, but C# 8.0 was the version released alongside it.

What is the C# version history?

Here is a brief C# version history:

  • C# 1.0 released with .NET 1.0
  • C# 1.2 released with .NET 1.1
  • C# 2.0 released with .NET 2.0
  • C# 3.0 released with .NET 3.5
  • C# 4.0 released with .NET 4.0
  • C# 5.0 released with .NET 4.5
  • C# 6.0 released with .NET 4.6
  • C# 7.0-7.3 released with .NET Framework updates
  • C# 8.0 released with .NET Core 3.0
  • C# 9.0 released with .NET 5.0
  • C# 10.0 released with .NET 6.0

For more details, visit the Stack Overflow answer that summarizes C# version history.

Which C# version is used in Unity?

As of Unity 2021.2, Unity uses C# 8.0 as the scripting language. However, some newer Unity versions might provide support for more recent C# versions. To stay updated with the latest C# support in Unity, refer to the Unity documentation.

What C# version corresponds to .NET Framework 4.8?

The C# version corresponding to .NET Framework 4.8 is C# 7.3. It’s important to note that you can also use newer C# versions with .NET Framework 4.8, but C# 7.3 was the version available for it at the time of its release.

πŸ€‘ Recommended: C# Developer – Income and Opportunity