Control de versiones del lenguaje C#

El compilador de C# más actualizado determina una versión de lenguaje predeterminada basada en los marcos o las plataformas de destino del proyecto. Visual Studio no proporciona una interfaz de usuario para cambiar el valor, pero se puede cambiar si se modifica el archivo csproj. La opción predeterminada garantiza que se use la versión del lenguaje más reciente compatible con el marco de trabajo de destino. Se beneficia del acceso a las características de lenguaje más recientes compatibles con el destino del proyecto. Esta opción predeterminada también garantiza que no se use un lenguaje que requiera tipos o el comportamiento en tiempo de ejecución no esté disponible en la plataforma de destino. La elección de una versión del lenguaje más reciente que la predeterminada puede provocar errores en tiempo de compilación y en tiempo de ejecución difíciles de diagnosticar.

C# 12 solo se admite en .NET 8 y versiones más recientes. C# 11 solo se admite en .NET 7 y versiones más recientes. C# 10 solo se admite en .NET 6 y versiones más recientes.

Consulte la página Compatibilidad de la plataforma Visual Studio para más información sobre qué versiones de .NET son compatibles con las versiones de Visual Studio. Consulte la página Compatibilidad de la plataforma Visual Studio para Mac para más información sobre qué versiones de .NET son compatibles con las versiones de Visual Studio para Mac. Consulte la página de Mono para C# para ver la compatibilidad de Mono con versiones de C#.

Valores predeterminados

El compilador determina un valor predeterminado según estas reglas:

Destino Versión Versión predeterminada del lenguaje C#
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET Core 3.x C# 8.0
.NET Core 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework todo C# 7.3

Si el proyecto tiene como destino un marco de preview que tenga una versión de lenguaje preliminar correspondiente, la versión de lenguaje que se usa es la que está en versión preliminar. Puede usar las características más recientes con esa versión preliminar en cualquier entorno, sin que afecte a los proyectos que tienen como destino una versión de .NET Core publicada.

Importante

La nueva plantilla de proyecto de Visual Studio 2017 agregó una entrada <LangVersion>latest</LangVersion> a los nuevos archivos de proyecto. Si actualiza la plataforma de destino para estos proyectos, la configuración de <LangVersion> puede invalidar el valor predeterminado para la nueva plataforma de destino. Asegúrese de quitar el <LangVersion>latest</LangVersion> del archivo del proyecto para asegurarse de que el proyecto usa la versión del compilador recomendada para la plataforma de destino. Puede actualizar la plataforma de destino para acceder a las características de lenguaje más recientes.

Reemplazar valores predeterminados

Si debe especificar su versión de C# explícitamente, puede hacerlo de varias maneras:

Sugerencia

Puede ver la versión del lenguaje en Visual Studio en la página de propiedades del proyecto. En la pestaña Compilar, el panel Opciones avanzadas muestra la versión seleccionada.

Para saber qué versión de lenguaje está usando actualmente, incluya #error version (con distinción de mayúsculas y minúsculas) en el código. Esto hace que el compilador genere un error de compilador, CS8304, con un mensaje que contiene la versión del compilador que se usa y la versión del lenguaje seleccionada actualmente. Vea #error (Referencia de C#) para obtener más información.

Edición del archivo del proyecto

Puede establecer la versión del lenguaje en el archivo del proyecto. Por ejemplo, si quiere acceder explícitamente a las características en versión preliminar, agregue un elemento similar al siguiente:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

El valor preview usa la versión preliminar más reciente disponible del lenguaje C# que admite el compilador.

Configurar varios proyectos

Para configurar varios proyectos, puede crear un archivo Directory.Build.props, normalmente en el directorio de la solución, que contiene el elemento <LangVersion>. Agregue la siguiente configuración al archivo Directory.Build.props:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

Las compilaciones de todos los subdirectorios del directorio que contenga ese archivo ahora usan la versión preliminar de C#. Para obtener más información, consulte Personalización de la compilación.

Referencia de la versión del lenguaje C#

En la siguiente tabla se muestran las versiones actuales del lenguaje C#. Es posible que los compiladores más antiguos no comprendan todos los valores. Si instala el SDK de .NET más reciente, tendrá acceso a todo lo que aparece.

Value Significado
preview El compilador acepta toda la sintaxis de lenguaje válida de la última versión preliminar.
latest El compilador acepta la sintaxis de la última versión del compilador (incluida las versión secundaria).
latestMajor
o bien default
El compilador acepta la sintaxis de la versión principal más reciente del compilador.
12.0 El compilador solo acepta la sintaxis que se incluye en C# 12 o versiones anteriores.
11.0 El compilador solo acepta la sintaxis que se incluye en C# 11 o versiones anteriores.
10.0 El compilador solo acepta la sintaxis que se incluye en C# 10 o versiones anteriores.
9.0 El compilador solo acepta la sintaxis que se incluye en C# 9 o versiones anteriores.
8.0 El compilador acepta solo la sintaxis que se incluye en C# 8.0 o versiones anteriores.
7.3 El compilador acepta solo la sintaxis que se incluye en C# 7.3 o versiones anteriores.
7.2 El compilador acepta solo la sintaxis que se incluye en C# 7.2 o versiones anteriores.
7.1 El compilador acepta solo la sintaxis que se incluye en C# 7.1 o versiones anteriores.
7 El compilador acepta solo la sintaxis que se incluye en C# 7.0 o versiones anteriores.
6 El compilador acepta solo la sintaxis que se incluye en C# 6.0 o versiones anteriores.
5 El compilador acepta solo la sintaxis que se incluye en C# 5.0 o versiones anteriores.
4 El compilador acepta solo la sintaxis que se incluye en C# 4.0 o versiones anteriores.
3 El compilador acepta solo la sintaxis que se incluye en C# 3.0 o versiones anteriores.
ISO-2
o bien 2
El compilador acepta solo la sintaxis que se incluye en ISO/IEC 23270:2006 C# (2.0).
ISO-1
o bien 1
El compilador acepta solo la sintaxis que se incluye en ISO/IEC 23270:2003 C# (1.0/1.2).

Nota:

Especificar LangVersion con el valor default es diferente de omitir la opción LangVersion. Al especificar default se usa la versión más reciente del lenguaje que admite el compilador, sin tener en cuenta la plataforma de destino. Por ejemplo, compilar un proyecto destinado a .NET 6 desde la versión actual de Visual Studio 2022 usa C# 10 si no se especifica LangVersion, pero usa C# 12 si LangVersion está establecido en default.