Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se tratan las siguientes advertencias del compilador:
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058: La característica no está disponible. Use la versión de lenguaje más reciente.
- CS8058: la característica es experimental.
- CS8192: la versión de lenguaje proporcionada no es compatible o válida
- CS8303: la versión del lenguaje proporcionada no puede tener ceros iniciales
- CS8304: la versión del compilador es menor que la versión del lenguaje
- CS1738: las especificaciones de argumento con nombre deben aparecer después de especificar todos los argumentos fijos.
- CS8306: se deduce el nombre del elemento tupla.
- CS8314: no se puede controlar una expresión de tipo mediante un patrón de tipo
- CS8371: atributos dirigidos al campo en propiedades automáticas no se admiten en esta versión del lenguaje
-
CS8401: para usar
@$en lugar de$@para una cadena textual interpolada, use la versión más reciente del lenguaje. - CS8511: Una expresión de tipo no puede ser manejada por un patrón de tipo.
- CS8627: un parámetro de tipo anulable debe estar definido como un tipo de valor o un tipo de referencia no anulable
- CS8630: opciones que aceptan valores NULL no válidas. Use la versión de lenguaje más reciente
- CS8652: el modificador no es válido para este elemento.
- CS8704: el tipo no implementa el miembro de interfaz. No puede implementar implícitamente un miembro no público.
- CS8706: el tipo no puede implementar un miembro de interfaz porque una característica no está disponible en esta versión.
- CS8904: varianza no válida: el parámetro de tipo debe ser válido.
- CS8912: no se admite heredar de un registro con un "Object.ToString" sellado.
- CS8919: no se puede implementar el miembro de interfaz especificado en el tipo porque el tiempo de ejecución de destino no admite miembros abstractos estáticos en interfaces
- CS8929: el método no puede implementar el miembro de interfaz en el tipo porque el tiempo de ejecución de destino no admite miembros abstractos estáticos en interfaces.
- CS8957: la expresión condicional no es válida en la versión del lenguaje porque no se encontró un tipo común entre tipos.
- CS8967: no se admiten nuevas líneas dentro de una cadena interpolada no textual en C#
- CS9041: requiere la característica del compilador que no es compatible con esta versión del compilador de C#.
- CS9014: Error: uso de propiedad posiblemente sin asignar. Actualizar a un valor predeterminado automático para la propiedad.
- CS9015: Error: uso de un campo posiblemente no asignado. Actualice para establecer automáticamente un valor predeterminado para el campo.
- CS9016: Advertencia: posible uso de una propiedad sin asignar. Actualice para establecer automáticamente el valor predeterminado de la propiedad.
- CS9017: Advertencia: uso de un campo posiblemente no asignado. Cambie al valor predeterminado automático para el campo.
- CS9064: el runtime de destino no admite campos de referencia.
- CS9103: definición en un módulo con una versión RefSafetyRulesAttribute no reconocida, esperando "11".
- CS9171: El tiempo de ejecución de destino no admite tipos de array en línea.
-
CS9194: es posible que no se pase el argumento con la palabra clave
ref. Para pasar argumentosrefa parámetrosin, actualice a la versión de idioma 12 o posterior. - CS9202: la característica no está disponible en C# 12.0. Use la versión de lenguaje más reciente
- CS9211: el argumento diagnosticId para el atributo "Experimental" debe ser un identificador válido.
- CS9240: El entorno de ejecución de destino no admite genéricos de tipo by-ref.
- CS9260: la característica no está disponible en C# 13.0. Use la versión de idioma más reciente.*
- CS9268: el tipo es solo para fines de evaluación y está sujeto a cambios o eliminación en futuras actualizaciones. Suprima este diagnóstico para continuar.
- CS9269: UnscopedRefAttribute solo es válido en C# 11 o posterior, o cuando el destino es net7.0 o posterior.
-
CS9271: el tipo '
Microsoft.CodeAnalysis.EmbeddedAttribute' debe ser no genérico, interno, sellado, no estático, tener un constructor sin parámetros, heredar de System.Attribute y poder aplicarse a cualquier tipo. - CS9327: la característica no está disponible en C# 14.0. Use la versión de idioma más reciente.
- CS9328: el método usa una característica que actualmente no es compatible con el entorno de ejecución asincrónico.
Además, los siguientes errores y advertencias guardan relación con los cambios de inicialización de la estructura en versiones recientes:
- CS0171, CS8881: El campo de respaldo de la propiedad implementada automáticamente "name" debe asignarse por completo antes de devolver el control al llamador.
- CS0188, CS8885: El objeto "this" no se puede usar antes de que se hayan asignado todos sus campos.
- CS0843, CS8880: El campo de respaldo de la propiedad implementada automáticamente 'name' debe asignarse completamente antes de devolver el control al llamador.
- CS8305: la característica es solo para fines de evaluación y está sujeta a cambios o eliminación en futuras actualizaciones.
- CS9204: el tipo es solo para fines de evaluación y está sujeto a cambios o eliminación en futuras actualizaciones. Suprima este diagnóstico para continuar.
La causa de todos estos errores y advertencias es que el compilador instalado admite una versión más reciente de C# que la versión que ha seleccionado el proyecto. El compilador de C# puede ajustarse a cualquier versión anterior. Puede validar la sintaxis con una versión anterior de C#, o porque el proyecto debe admitir bibliotecas o entornos de ejecución más antiguos.
Hay dos causas posibles y tres maneras de solucionar estos errores y advertencias.
Actualice su marco de trabajo de destino
El compilador determina un valor predeterminado según estas reglas:
| Objetivo | Versión | Versión predeterminada del lenguaje C# |
|---|---|---|
| .NET | 11.x | C# 15 |
| .NET | 10.x | C# 14 |
| .NET | 9.x | C# 13 |
| .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 la plataforma seleccionada no coincide con la versión de lenguaje necesaria, puede actualizar la plataforma de destino.
Selección de la versión de lenguaje coincidente
Es posible que tenga una plataforma de destino anterior seleccionada en el archivo del proyecto. Si quita el elemento LangVersion del archivo de proyecto, el compilador usa el valor predeterminado que se muestra en la sección anterior. En la siguiente tabla se muestran las versiones actuales del lenguaje C#. También puede especificar una versión de lenguaje específica para habilitar las características más recientes.
| Importancia | 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 versión más reciente (incluida la versión secundaria). |
latestMajoro bien default |
El compilador acepta la sintaxis de la versión principal más reciente del compilador. |
15.0 |
El compilador acepta solo la sintaxis que se incluye en C# 15 o inferior. |
14.0 |
El compilador acepta solo la sintaxis que se incluye en C# 14 o inferior. |
13.0 |
El compilador solo acepta la sintaxis que se incluye en C# 13 o versiones anteriores. |
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-2o bien 2 |
El compilador acepta solo la sintaxis que se incluye en ISO/IEC 23270:2006 C# (2.0). |
ISO-1o bien 1 |
El compilador acepta solo la sintaxis que se incluye en ISO/IEC 23270:2003 C# (1.0/1.2). |
Puede obtener más información sobre las versiones de lenguaje admitidas para cada versión de plataforma en el artículo Configuración de la versión de lenguaje en la sección de referencia del lenguaje.
Evitar la característica actualizada
Si debe admitir bibliotecas o entornos de ejecución anteriores, es posible que tenga que evitar el uso de características más recientes.
Habilitar características experimentales
Los diagnósticos de las características experimentales se pueden deshabilitar para usar la característica experimental.
Advertencia
Las características experimentales están sujetas a cambios. Las API pueden cambiar o se pueden quitar en futuras actualizaciones. Incluir características experimentales es una manera de que los autores de bibliotecas obtengan comentarios sobre ideas y conceptos para el desarrollo futuro. Tenga precaución extrema al usar cualquier característica marcada como experimental.
También puede declarar sus propias características experimentales mediante System.Diagnostics.CodeAnalysis.ExperimentalAttribute. El compilador emite CS9211 si el identificador usado para la característica experimental no es un identificador válido.
Cambios disruptivos en la inicialización de estructuras
Todos estos errores y advertencias ayudan a garantizar que los tipos struct se inicializan correctamente antes de que se acceda a sus campos. En versiones anteriores de C#, debe asignar explícitamente todos los campos de una estructura en cualquier constructor. El constructor sin parámetros inicializa todos los campos en su valor predeterminado. En versiones posteriores, todos los constructores inicializan todos los campos. El campo se establece explícitamente, se establece en un inicializador de campo o se establece en su valor predeterminado.
- CS0171, CS8881: El campo de respaldo para la propiedad implementada automáticamente "name" debe estar completamente asignado antes de que el control sea devuelto al llamador.
- CS0188, CS8885: El objeto "this" no se puede usar antes de que se hayan asignado todos sus campos.
- CS0843, CS8880: El campo auxiliar de la propiedad implementada automáticamente "name" debe estar completamente asignado antes de devolver el control al llamador.
Para solucionar este error, actualice la versión del lenguaje a C# 11, cada constructor struct inicializa todos los campos. Si no es una opción posible, debe llamar explícitamente al constructor predeterminado, como se muestra en el ejemplo siguiente:
struct S
{
public int AIProp { get; set; }
public S(int i){} //CS0843
// Try the following lines instead.
// public S(int i) : this()
// {
// AIProp = i;
// }
}
class Test
{
static int Main()
{
return 1;
}
}
Atributos específicos de implementación
-
CS9271: el tipo '
Microsoft.CodeAnalysis.EmbeddedAttribute' debe ser no genérico, interno, sellado, no estático, tener un constructor sin parámetros, heredar de System.Attribute y poder aplicarse a cualquier tipo.
El compilador genera el origen de este atributo cuando sea necesario para el código fuente. No debería declarar este tipo.