Compartilhar via


Erros e avisos do pré-processador

O compilador gera os seguintes erros para uso incorreto de diretivas de pré-processador:

  • CS1024: Diretiva de pré-processador esperada
  • CS1025: comentário de linha única ou fim de linha esperado
  • CS1027: diretiva #endif esperada
  • CS1028: Diretiva de pré-processador inesperada
  • CS1029: #error: 'text'
  • CS1030: #warning: 'text'
  • CS1032: Não é possível definir/indefinir símbolos de pré-processador após o primeiro token no arquivo
  • CS1038: diretiva #endregion esperada
  • CS1040: as diretivas de pré-processador devem aparecer como o primeiro caractere de espaço não branco em uma linha
  • CS1517: Expressão de pré-processador inválida
  • CS1560: nome de arquivo inválido especificado para a diretiva de pré-processador. O nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1576: O número de linha especificado para #line diretiva está ausente ou inválido
  • CS1578: Nome do arquivo, comentário de linha única ou fim de linha esperado
  • CS1633: diretiva de #pragma não reconhecida
  • CS1634: Desabilitação ou restauração esperada
  • CS1635: Não é possível restaurar o aviso 'código de aviso' porque ele foi desabilitado globalmente
  • CS1691: 'number' não é um número de alerta válido
  • CS1692: Número inválido
  • CS1694: nome de arquivo inválido especificado para a diretiva de pré-processador. O nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1695: Sintaxe inválida de #pragma checksum; deve ser #pragma checksum "nome do arquivo" "{XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Comentário de linha única ou fim de linha esperado
  • CS1709: O nome do arquivo especificado para a diretiva de pré-processador está vazio
  • CS7009: Não é possível usar #r após o primeiro token no arquivo
  • CS7010: Nome do arquivo entre aspas esperado
  • CS7011: #r só é permitido em scripts
  • CS8097: #load só é permitido em scripts
  • CS8098: Não é possível usar #load após o primeiro token no arquivo
  • CS8938: O valor da diretiva #line está ausente ou fora do intervalo
  • CS8939: A posição final da diretiva #line deve ser maior ou igual à posição inicial
  • CS8996: Literais de cadeia de caracteres brutos não são permitidos em diretivas de pré-processador
  • CS9028: A diretiva de abrangência #line requer espaço antes do primeiro parêntese, antes do deslocamento do caractere e antes do nome do arquivo
  • CS9297: #: as diretivas não podem ser após o primeiro token no arquivo
  • CS9298: #: as diretivas só podem ser usadas em programas baseados em arquivo (-features:FileBasedProgram)
  • CS9299: #: as diretivas não podem ser após a #if diretiva
  • CS9314: #! as diretivas só podem ser usadas em scripts ou programas baseados em arquivo

Sintaxe de diretiva de pré-processador inválida

  • CS1024: Diretiva de pré-processador esperada
  • CS1025: É esperado um comentário de linha única ou fim de linha
  • CS1027: diretiva #endif esperada
  • CS1028: Diretiva de pré-processador inesperada
  • CS1038: diretiva #endregion esperada
  • CS1040: as diretivas de pré-processador devem aparecer como o primeiro caractere de espaço não branco em uma linha
  • CS1517: Expressão de pré-processador inválida
  • CS1633: diretiva de #pragma não reconhecida
  • CS1696: Comentário de linha única ou fim de linha esperado
  • CS8996: Literais de cadeia de caracteres brutos não são permitidos em diretivas de pré-processador

Esses erros indicam que você usou sintaxe inválida para diretivas de pré-processador. As causas mais comuns incluem:

  • Usando uma diretiva não reconhecida após # (CS1024, CS1633).
  • Incluindo comentários de várias linhas nas linhas de diretivas (CS1025, CS1696).
  • Usando diretivas em locais inesperados (CS1028).
  • Diretivas correspondentes obrigatórias ausentes (CS1027, CS1038).
  • Não definir ou anular a definição de símbolos como o primeiro token no arquivo (CS1032)
  • Não colocar a diretiva como o primeiro token em uma linha (CS1040).
  • Usando expressões inválidas na compilação condicional (CS1517).
  • Usando textos literais brutos em diretivas de pré-processador (CS8996).

Exemplo de CS1024 – Diretiva de pré-processador esperada:

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

Exemplo de CS1025 – comentário de uma única linha ou fim de linha esperado:

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

Exemplo de CS1027 – diretiva #endif esperada:

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

Exemplo de CS1028 – Diretiva de pré-processador inesperada:

#endif   // CS1028 - no matching #if

Exemplo de CS1032 – #define e #undef diretivas de pré-processador devem aparecer antes de outros tokens:

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

Exemplo de CS1038 – diretiva #endregion esperada:

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

Exemplo de CS1040 – as diretivas de pré-processador devem aparecer como o primeiro caractere de espaço não branco:

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

Exemplo de CS1517 – Expressão de pré-processador inválida:

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

Exemplo CS1633 - Diretiva #pragma não reconhecida:

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

Exemplo de CS8996 – literais de string bruta não são permitidos em diretivas do pré-processador:

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

Para corrigir esse erro, use uma constante de string regular:

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

Para corrigir esses erros, verifique se suas diretivas de pré-processador seguem as regras de sintaxe corretas descritas na documentação de diretivas de pré-processador.

erros de diretiva #error e #warning

  • CS1029: #error: 'text'
  • CS1030: #warning: 'text'
  • CS1634: Desabilitação ou restauração esperada
  • CS1635: Não é possível restaurar o aviso 'código de aviso' porque ele foi desabilitado globalmente
  • CS1691: 'number' não é um código de aviso válido
  • CS1692: Número inválido

Esses erros ocorrem quando o compilador processa #error#warninge #pragma warning diretivas. Essas diretivas permitem que você gere mensagens de erro e aviso personalizadas durante o comportamento de aviso de compilação e controle.

O CS1029 exibe o texto de um erro definido com a #error diretiva:

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

A compilação produz a saída a seguir:

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

O CS1030 exibe o texto de um aviso definido com a #warning diretiva:

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

A compilação produz a saída a seguir:

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

O CS1634 ocorre quando uma cláusula #pragma warning é mal formada, como quando desabilitar ou restaurar é omitido.

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

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

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

O CS1635 ocorre quando você usa a opção /nowarn de linha de comando ou a configuração do projeto para desabilitar um aviso globalmente, mas use #pragma warning restore para tentar restaurar esse aviso:

// 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
    }
}

O CS1691 ocorre quando um número passado para a #pragma warning diretiva não é um número de aviso 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 ocorre quando um número em diretivas de pré-processador como #pragma e #line é inválido porque é muito grande, está no formato errado ou contém caracteres ilegais.

// CS1692.cs

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

class A
{
    static void Main()
    {
    }
}

Essas diretivas são úteis para cenários de compilação condicional em que você deseja alertar os desenvolvedores sobre condições específicas no código ou controlar quais avisos são exibidos durante a compilação. Para obter mais informações sobre como usar essas diretivas, consulte a documentação das diretivas de pré-processador e #pragma aviso.

#line e erros de diretiva de arquivo

  • CS1560: nome de arquivo inválido especificado para a diretiva de pré-processador. O nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1576: O número de linha especificado para #line diretiva está ausente ou inválido
  • CS1578: Nome do arquivo, comentário de uma linha ou fim de linha esperado
  • CS1694: nome de arquivo inválido especificado para a diretiva de pré-processador. O nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1695: Sintaxe inválida de #pragma checksum; deve ser #pragma checksum "nome do arquivo" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1709: O nome do arquivo especificado para a diretiva de pré-processador está vazio
  • CS8938: o valor da diretiva #line está ausente ou fora do intervalo
  • CS8939: A posição final da diretiva #line deve ser maior ou igual à posição inicial
  • CS9028: A diretiva de abrangência #line requer espaço antes do primeiro parêntese, antes do deslocamento do caractere e antes do nome do arquivo

Esses erros indicam o uso incorreto da diretiva ou das #line diretivas de pré-processador relacionadas ao arquivo. As causas mais comuns incluem:

  • Nomes de arquivo inválidos ou ausentes (CS1560, CS1694, CS1709).
  • Formato ou valores de número de linha incorretos (CS1576, CS8938, CS8939).
  • Sintaxe adequada ausente para nomes de arquivo e comentários (CS1578).
  • Sintaxe malformada #pragma checksum (CS1695).
  • Espaçamento inadequado em #line diretivas de intervalo (CS9028).

Exemplo de CS1560/CS1694 – nome de arquivo inválido especificado:

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

Exemplo de CS1576 – Número de linha ausente ou inválido:

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

Exemplo de CS1578 – Nome do arquivo, comentário ou fim de linha esperado:

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

Exemplo de CS1695 – Sintaxe inválida de #pragma checksum:

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

Exemplo de CS1709 – Nome de arquivo vazio:

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

Exemplo CS8938 - valor da diretiva #line ausente ou fora do intervalo:

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

Exemplo de CS8939: erro na posição final de #line:

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

Exemplo CS9028 – espaçamento da diretiva de alcance #line:

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

Para corrigir esses erros, verifique se suas #line diretivas e diretivas de pré-processador relacionadas ao arquivo seguem a sintaxe correta, conforme descrito na documentação de diretivas de pré-processador.

Uso incorreto de diretivas de aplicativos baseados em arquivo

  • CS9297: #: as diretivas não podem ser após o primeiro token no arquivo
  • CS9298: #: as diretivas só podem ser usadas em programas baseados em arquivo (-features:FileBasedProgram)
  • CS9299: #: as diretivas não podem ser após a #if diretiva
  • CS9314: #! as diretivas só podem ser usadas em scripts ou programas baseados em arquivo

Esses erros indicam que você usou as #: diretivas para um aplicativo baseado em arquivo incorretamente. Você pode saber mais sobre a sintaxe dessas diretivas no artigo sobre diretivas de pré-processador na seção sobre aplicativos baseados em arquivo. Ou você pode explorar aplicativos baseados em arquivos seguindo o tutorial sobre aplicativos baseados em arquivo.

O arquivo contém diretivas de script.cs

Os erros a seguir indicam script.cs sintaxe em um arquivo C# compilado:

  • CS7009: Não é possível usar #r após o primeiro token no arquivo
  • CS7010: Nome do arquivo entre aspas esperado
  • CS7011: #r só é permitido em scripts
  • CS8097: #load só é permitido em scripts

Essas diretivas não têm suporte no C# compilado. Você deve removê-los ou usar script.cs.