Compartir a través de


Errores y advertencias del preprocesador

El compilador genera los siguientes errores para el uso incorrecto de directivas de preprocesador:

  • CS1024: se esperaba una directiva de preprocesador
  • CS1025: comentario de una sola línea o fin de línea esperado
  • CS1027: directiva #endif esperada
  • CS1028: Directiva de preprocesador inesperada
  • CS1029: #error: "text"
  • CS1030: #advertencia: "text"
  • CS1032: No se pueden definir o anular símbolos de preprocesador después del primer token del archivo
  • CS1038: #endregion directiva esperada
  • CS1040: Las directivas de preprocesador deben aparecer como el primer carácter que no sea de espacio en blanco en una línea.
  • CS1517: Expresión de preprocesador no válida
  • CS1560: nombre de archivo no válido especificado para la directiva de preprocesador. El nombre de archivo es demasiado largo o no es un nombre de archivo válido
  • CS1576: falta el número de línea especificado para #line directiva o no es válido
  • CS1578: Nombre de archivo, comentario de una sola línea o fin de línea esperado
  • CS1633: directiva #pragma no reconocida
  • CS1634: Se esperaba deshabilitar o restaurar
  • CS1635: No se puede restaurar la advertencia "código de advertencia" porque se deshabilitó globalmente
  • CS1691: "number" no es un número de advertencia válido
  • CS1692: número no válido
  • CS1694: nombre de archivo no válido especificado para la directiva de preprocesador. El nombre de archivo es demasiado largo o no es un nombre de archivo válido
  • CS1695: sintaxis de #pragma checksum no válida; debe ser #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Se espera un comentario de una sola línea o al final de la línea
  • CS1709: el nombre de archivo especificado para la directiva de preprocesador está vacío
  • CS7009: no se puede usar #r después del primer token en el archivo
  • CS7010: Se espera un nombre de archivo citado
  • CS7011: #r se permite solo en scripts
  • CS8097: solo se permite #load en scripts
  • CS8098: no se puede usar #load después del primer token en el archivo
  • CS8938: Falta el valor de la directiva #line o está fuera de rango
  • CS8939: la posición final de la directiva #line debe ser mayor o igual que la posición inicial.
  • CS8996: No se permiten los literales de cadena Raw en las directivas de preprocesador
  • CS9028: La directiva de alcance de #line requiere espacio antes del primer paréntesis, antes de la compensación de caracteres y antes del nombre del archivo.
  • CS9297: #: las directivas no pueden ser después del primer token del archivo
  • CS9298: #: las directivas solo se pueden usar en programas basados en archivos (-features:FileBasedProgram)
  • CS9299: #: las directivas no pueden ser posteriores #if a la directiva
  • CS9314: #! las directivas solo se pueden usar en scripts o programas basados en archivos

Sintaxis de directiva de preprocesador no válida

  • CS1024: se esperaba una directiva de preprocesador
  • CS1025: se espera un comentario de una sola línea o el fin de línea
  • CS1027: #endif directiva esperada
  • CS1028: Directiva de preprocesador inesperada
  • CS1038: se esperaba la directiva #endregion
  • CS1040: Las directivas de preprocesador deben aparecer como el primer carácter que no sea de espacio en blanco en una línea.
  • CS1517: Expresión de preprocesador no válida
  • CS1633: Directiva #pragma desconocida
  • CS1696: comentario de una sola línea o fin de línea esperado
  • CS8996: No se permiten literales de cadena sin formato en las directivas de preprocesador

Estos errores indican que usó sintaxis no válida para las directivas de preprocesador. Entre las causas comunes se incluyen:

  • Uso de una directiva no reconocida después de # (CS1024, CS1633).
  • Incluir comentarios multilínea en las líneas de directiva (CS1025, CS1696).
  • Uso de directivas en ubicaciones inesperadas (CS1028).
  • Faltan directivas de coincidencia requeridas (CS1027, CS1038).
  • No definir o anular la definición de símbolos como primer token en el archivo (CS1032)
  • No colocar la directiva como primer token en una línea (CS1040).
  • Uso de expresiones no válidas en la compilación condicional (CS1517).
  • Uso de literales de cadena en bruto en directivas de preprocesador (CS8996).

Ejemplo de CS1024: se esperaba una directiva de preprocesador:

#import System   // CS1024 - "import" is not a valid directive

Ejemplo CS1025 - Se esperaba un comentario de una sola línea o el fin de una línea:

#if true /* hello  
*/   // CS1025 - multiline comment not allowed
#endif

Ejemplo CS1027 - directiva #endif esperada:

#if true   // CS1027 - missing #endif
class Test { }

Ejemplo de CS1028: directiva de preprocesador inesperada:

#endif   // CS1028 - no matching #if

Ejemplo de CS1032: #define y #undef las directivas de preprocesador deben aparecer antes de otros tokens:

/* Comment */ 
#define X   // CS1032 - directive not first token in file

Ejemplo de CS1038: Se esperaba la directiva #endregion:

#region testing
class Test { }
// CS1038 - missing #endregion

Ejemplo de CS1040: las directivas de preprocesador deben aparecer como el primer carácter que no es de espacio en blanco:

/* Comment */ #define X   // CS1040 - directive not first on line

Ejemplo de CS1517: expresión de preprocesador no válida:

#if 1           // CS1517 - numeric literals not allowed
#endif
#if ~symbol     // CS1517 - bitwise operators not allowed  
#endif

Ejemplo de CS1633: directiva #pragma no reconocida:

#pragma unknown  // CS1633 - "unknown" is not a valid pragma

Ejemplo de CS8996: no se permiten literales de cadena sin formato en directivas de preprocesador:

// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // CS8996
class Test { }

Para corregir este error, use un literal de cadena normal:

#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // OK
class Test { }

Para corregir estos errores, asegúrese de que las directivas de preprocesador siguen las reglas de sintaxis correctas descritas en la documentación de directivas de preprocesador.

errores de las directivas #error y #warning

  • CS1029: #error: "text"
  • CS1030: #warning: "text"
  • CS1634: Se esperaba deshabilitar o restaurar
  • CS1635: No se puede restaurar la advertencia "código de advertencia" porque se deshabilitó globalmente
  • CS1691: "number" no es un número de advertencia válido
  • CS1692: número no válido

Estos errores se producen cuando el compilador procesa #error, #warning y #pragma warning. Estas directivas permiten generar mensajes de error y advertencia personalizados durante la compilación y controlar el comportamiento de las advertencias.

CS1029 muestra el texto de un error definido con la #error directiva :

// CS1029.cs
class Sample
{
   static void Main()
   {
      #error Let's give an error here   // CS1029
   }
}

La compilación genera el siguiente resultado:

example.cs(9,8): error CS1029: #error: 'Let's give an error here   // CS1029  '

CS1030 muestra el texto de una advertencia definida con la #warning directiva :

// CS1030.cs
class Sample
{
   static void Main()
   {
      #warning Let's give a warning here
   }
}

La compilación genera el siguiente resultado:

example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'

CS1634 se produce cuando una #pragma warning cláusula tiene un formato incorrecto, como cuando se omite la deshabilitación o restauración:

// CS1634.cs
// compile with: /W:1

#pragma warning   // CS1634
// Try this instead:
// #pragma warning disable 0219

class MyClass
{
  public static void Main()
  {
  }
}

CS1635 se produce cuando se usa la opción de línea de comandos o la /nowarn configuración del proyecto para deshabilitar una advertencia globalmente, pero se usa #pragma warning restore para intentar restaurar esa advertencia:

// CS1635.cs
// compile with: /w:1 /nowarn:162

enum MyEnum {one=1,two=2,three=3};

class MyClass
{
    public static void Main()
    {
#pragma warning disable 162

    if (MyEnum.three == MyEnum.two)
        System.Console.WriteLine("Duplicate");

#pragma warning restore 162  // CS1635
    }
}

CS1691 se produce cuando un número pasado a la #pragma warning directiva no es un número de advertencia válido:

// CS1691.cs
public class C
{
    int i = 1;
    public static void Main()
    {
        C myC = new C();
#pragma warning disable 151  // CS1691
// Try the following line instead:
// #pragma warning disable 1645
        myC.i++;
#pragma warning restore 151  // CS1691
// Try the following line instead:
// #pragma warning restore 1645
    }
}

CS1692 se produce cuando un número en directivas de preprocesador como #pragma y #line no es válido porque es demasiado grande, en el formato incorrecto o contiene caracteres no válidos:

// CS1692.cs

#pragma warning disable a  // CS1692
// Try this instead:
// #pragma warning disable 1691

class A
{
    static void Main()
    {
    }
}

Estas directivas son útiles para escenarios de compilación condicional en los que desea alertar a los desarrolladores sobre condiciones específicas en el código o controlar qué advertencias se muestran durante la compilación. Para obtener más información sobre el uso de estas directivas, consulte la documentación de directivas de preprocesador y #pragma advertencia.

#line y errores de directivas de archivo

  • CS1560: nombre de archivo no válido especificado para la directiva de preprocesador. El nombre de archivo es demasiado largo o no es un nombre de archivo válido
  • CS1576: falta el número de línea especificado para la directiva #line o no es válido
  • CS1578: Se espera nombre de archivo, comentario de una sola línea o fin de línea
  • CS1694: nombre de archivo no válido especificado para la directiva de preprocesador. El nombre de archivo es demasiado largo o no es un nombre de archivo válido
  • CS1695: Syntax de #pragma checksum no válida; debe ser #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1709: el nombre de archivo especificado para la directiva de preprocesador está vacío
  • CS8938: El valor de la directiva #line falta o está fuera del intervalo
  • CS8939: la posición final de la directiva #line debe ser mayor o igual que la posición inicial.
  • CS9028: la directiva #line span requiere espacio antes del primer paréntesis, antes del desplazamiento de caracteres y antes del nombre de archivo.

Estos errores indican un uso incorrecto de la directiva o de las directivas de preprocesador relacionadas con archivos#line. Entre las causas comunes se incluyen:

  • Nombres de archivo no válidos o que faltan (CS1560, CS1694, CS1709).
  • Formato o valores incorrectos del número de línea (CS1576, CS8938, CS8939).
  • Falta la sintaxis adecuada para los nombres de archivo y los comentarios (CS1578).
  • Sintaxis con formato incorrecto #pragma checksum (CS1695).
  • Espaciado incorrecto en las directivas span #line (CS9028).

Ejemplo de CS1560/CS1694: nombre de archivo no válido especificado:

#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt"   // CS1560/CS1694 - filename too long

Ejemplo de CS1576: falta el número de línea o no es válido:

#line "abc.sc"         // CS1576 - missing line number
#line abc "file.cs"    // CS1576 - invalid line number format

Ejemplo de CS1578: nombre de archivo, comentario o fin de línea esperado:

#line 101 abc.cs   // CS1578 - filename not quoted

CS1695 ejemplo - Sintaxis no válida de #pragma checksum:

#pragma checksum "12345"  // CS1695 - missing GUID and checksum

Ejemplo de CS1709: nombre de archivo vacío:

#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" ""  // CS1709 - empty filename

Ejemplo de CS8938: falta el valor o está fuera del rango en la directiva #line:

#line   // CS8938 - missing value
#line 0  // CS8938 - out of range (must be 1-16,707,566)

Ejemplo de CS8939 - error de posición final en #line:

#line (1, 10) - (1, 5) "file.cs"  // CS8939 - end column < start column

Ejemplo de CS9028 - directiva #line y su alcance de línea:

#line(1, 1) - (1, 10)"file.cs"  // CS9028 - missing spaces

Para corregir estos errores, asegúrese de que las #line directivas y las directivas de preprocesador relacionadas con archivos siguen la sintaxis correcta, tal como se describe en la documentación de directivas de preprocesador.

Uso incorrecto de directivas de aplicaciones basadas en archivos

  • CS9297: #: las directivas no pueden ser después del primer token del archivo
  • CS9298: #: las directivas solo se pueden usar en programas basados en archivos (-features:FileBasedProgram)
  • CS9299: #: las directivas no pueden ser posteriores #if a la directiva
  • CS9314: #! las directivas solo se pueden usar en scripts o programas basados en archivos

Estos errores indican que ha usado las #: directivas para una aplicación basada en archivos incorrectamente. Puede obtener más información sobre la sintaxis de estas directivas en el artículo sobre directivas de preprocesador en la sección sobre aplicaciones basadas en archivos. O bien, puede explorar aplicaciones basadas en archivos siguiendo el tutorial sobre aplicaciones basadas en archivos.

El archivo contiene directivas script.cs

Los errores siguientes indican script.cs sintaxis en un archivo C# compilado:

  • CS7009: no se puede usar #r después del primer token del archivo
  • CS7010: se esperaba el nombre de archivo entre comillas
  • CS7011: El uso de #r solo se permite en guiones.
  • CS8097: solo se permite #load en scripts

Estas directivas no se admiten en C#compilado. Debe eliminarlos o usar script.cs.