La función 'usar declaraciones' no está disponible en C # 7.3. Utilice la versión de idioma 8.0 o superior: error en una máquina pero funciona en otra


24

Cuando se usa Visual Studio Enterprise 16.3.7en dos máquinas separadas, una funciona bien y la otra arroja el error:

La función 'usar declaraciones' no está disponible en C # 7.3. Utilice la versión de idioma 8.0 o superior.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Esto puede ser fácilmente resuelto en la máquina de trabajo mediante el establecimiento de ninguno LangVersionde .csprojcomo se sugiere aquí https://stackoverflow.com/a/48085575/3850405 o dejar que Visual Studio fijar automáticamente como la pantalla de impresión anterior.

<LangVersion>8.0</LangVersion>

Lo que no puedo entender es por qué una máquina funciona bien sin esta línea .csprojy la otra máquina la necesita.


Si obtiene dicho error, significa que no es un proyecto C # 8, o usa una versión Resharper con un error de análisis
Panagiotis Kanavos

¿Cuál es el TargetFramework y LangVersion en su csproj?
Panagiotis Kanavos

@PanagiotisKanavos Sí, pero el proyecto se basa en una máquina y no en la otra, eso es lo que no entiendo. ReSharper no se utiliza.
Ogglas

Esto podría significar que falta el 3.0 SDK en una máquina. ¿Qué dotnet --list-sdksmuestra?
Panagiotis Kanavos

@PanagiotisKanavos Target framework .NET Framework 4.6.1y LangVersionno está configurado.
Ogglas

Respuestas:


20

Recibí el mismo error, pero simplemente me había olvidado de incluir el

<LangVersion>8.0</LangVersion>

atributo en TODOS los archivos .csproj en la solución. La siguiente es mi configuración actual de c # 8:

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
    <NullableContextOptions>enable</NullableContextOptions>
  </PropertyGroup>

Encontré que los siguientes documentos son los más útiles al migrar del núcleo 2.2 a 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1


2
Puedes usar en <LangVersion>latest</LangVersion>lugar de<LangVersion>8.0</LangVersion>
Eliahu Aaron

1
Creo que el primer enlace MSDN 2.2 -> 3.0está destinado a enlazar a lo siguiente: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 He intentado editar la respuesta para enmendarla, pero "sugerí editar la cola está lleno ", así que publicaré aquí en su lugar.
ahillier88


11

Esto puede deberse a que el compilador utiliza por defecto diferentes versiones de lenguaje C # para diferentes marcos de destino.

Para anular el lenguaje C # predeterminado, agregue al archivo del proyecto (como se sugiere en la pregunta):

<PropertyGroup>
   <LangVersion>8.0</LangVersion>
</PropertyGroup>

o:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Consulte las versiones en lenguaje C # para conocer las versiones predeterminadas en lenguaje C # para los diferentes marcos de destino y cómo seleccionar manualmente la versión en lenguaje C #.

Consulte también la respuesta de desbordamiento de pila ¿C # 8 admite .NET Framework? para más información sobre este tema


Aquí está parte del artículo de versiones de lenguaje C # :

Versiones de lenguaje C #

El último compilador de C # determina una versión de idioma predeterminada basada en el marco o marcos de destino de su proyecto. Esto se debe a que el lenguaje C # puede tener características que dependen de tipos o componentes de tiempo de ejecución que no están disponibles en todas las implementaciones de .NET. Esto también garantiza que, independientemente del objetivo para el que se construya su proyecto, obtenga la versión de idioma compatible más alta de forma predeterminada.

Las reglas de este artículo se aplican al compilador entregado con Visual Studio 2019 o .NET Core 3.0 SDK. Los compiladores de C # que forman parte de la instalación de Visual Studio 2017 o versiones anteriores de .NET Core SDK se dirigen a C # 7.0 de manera predeterminada.

Valores predeterminados

El compilador determina un valor predeterminado basado en estas reglas:

--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.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   | all     | C# 7.3
--------------------------------------------------------

Anular un valor predeterminado

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

  • Edite manualmente su archivo de proyecto.
  • Establezca la versión de idioma para varios proyectos en un subdirectorio.
  • Configure la opción del compilador -langversion.

Edite el archivo del proyecto

Puede configurar la versión del idioma en su archivo de proyecto. Por ejemplo, si desea acceder explícitamente a las funciones de vista previa, agregue un elemento como este:

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

El valor previewutiliza la última versión preliminar disponible del lenguaje C # que admite su compilador.

Configurar múltiples proyectos

Para configurar varios proyectos, puede crear un archivo Directory.Build.props que contenga el <LangVersion>elemento. Normalmente lo haces en tu directorio de soluciones. Agregue lo siguiente a un archivo Directory.Build.props en su directorio de soluciones:

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

Ahora, las compilaciones en cada subdirectorio del directorio que contiene ese archivo utilizarán la versión preliminar de C #. Para obtener más información, consulte el artículo sobre Personalizar su compilación .


8

Descargué la última versión de .Net Core 3.0 y 3.1 y tuve el mismo problema. Para mí, la solución parecía descargar la última actualización para Visual Studio 2019 (a la versión 16.4.2).

Esto también reinició mi computadora y el error desapareció.


Ese no es un número de versión VS2019, se parece a 16.xy Use Ayuda> Acerca de.
Hans Passant

4.7.03056 es una versión de .NET Framework, la última versión VS actualmente es 16.4.4
Alex
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.