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# 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. C# 9 solo se admite en .NET 5 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 | 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 |
Cuando el proyecto tiene como destino un marco en versión preliminar 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 de estos proyectos, invalidan el comportamiento predeterminado. Debe quitar <LangVersion>latest</LangVersion>
del archivo del proyecto al actualizar el SDK de .NET. Después, el proyecto usará 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.
Invalidación de un valor predeterminado
Si debe especificar su versión de C# explícitamente, puede hacerlo de varias maneras:
- Editar manualmente el archivo del proyecto.
- Establecer la versión del lenguaje para varios proyectos en un subdirectorio.
- Configure la opción del compilador LangVersion.
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, se puede crear un archivo Directory.Build.props que contenga el elemento <LangVersion>
. Por lo general, esto se hace en el directorio de la solución. Agregue lo siguiente a un archivo Directory.Build.props en el directorio de la solución:
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
Las compilaciones de todos los subdirectorios del directorio que contenga ese archivo usarán la sintaxis de 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 el compilador no entienda necesariamente todos los valores si es más antiguo. Si instala el SDK de .NET más reciente, tendrá acceso a todo lo que aparece.
Valor | 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. |
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). |