Partilhar via


Erros e avisos do pré-processador

O compilador gera os seguintes erros para o 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: «texto»
  • CS1030: #warning: 'texto'
  • CS1032: Não é possível definir/desdefinir símbolos do 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 sem espaço em 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. 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 #pragma não reconhecida
  • CS1634: Desabilitação ou restauração esperada
  • CS1635: Não é possível restaurar o aviso 'código de aviso' porque foi desativado globalmente
  • CS1691: 'número' não é um número de aviso válido
  • CS1692: Número inválido
  • CS1694: Nome de arquivo inválido especificado para a diretiva de pré-processador. Nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1695: Sintaxe de #pragma checksum inválida; deve ser #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Comentário de linha única ou fim de linha esperado
  • CS1709: 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 de arquivo citado 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 #line span requer espaço antes do primeiro parêntese, antes do deslocamento de caracteres e antes do nome do arquivo
  • CS9297: #: diretivas não podem ser após o primeiro token no arquivo
  • CS9298: #: diretivas só podem ser usadas em programas baseados em arquivo (-features:FileBasedProgram)
  • CS9299: #: as diretivas não podem ser posteriores à #if diretiva
  • CS9314: #! diretivas só podem ser usadas em scripts ou programas baseados em arquivo

Sintaxe inválida da diretiva do pré-processador

  • CS1024: Diretiva de pré-processador esperada
  • CS1025: Comentário de linha única ou fim de linha previsto
  • CS1027: #endif diretiva esperada
  • CS1028: Diretiva de pré-processador inesperada
  • CS1038: Diretiva #endregion esperada
  • CS1040: As diretivas de pré-processador devem aparecer como o primeiro caractere sem espaço em branco em uma linha
  • CS1517: Expressão de pré-processador inválida
  • CS1633: Diretiva #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 comuns incluem:

  • Usando uma diretiva não reconhecida depois de # (CS1024, CS1633).
  • Incluindo comentários de várias linhas sobre linhas diretivas (CS1025, CS1696).
  • Usando diretivas em locais inesperados (CS1028).
  • Faltam diretivas de correspondência necessárias (CS1027, CS1038).
  • Não definir ou desdefinir símbolos como o primeiro token no ficheiro (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 literais de cadeia de caracteres bruta em diretivas de pré-processador (CS8996).

Exemplo CS1024 - Diretiva de pré-processador esperada:

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

Exemplo CS1025 - Comentário de linha única ou fim de linha esperado:

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

Exemplo CS1027 - diretiva #endif esperada:

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

Exemplo CS1028 - Diretiva de pré-processador inesperada:

#endif   // CS1028 - no matching #if

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

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

Exemplo CS1038 - espera-se a diretiva #endregion:

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

Exemplo CS1040 - As diretivas de pré-processador devem aparecer como o primeiro caractere sem espaço em branco:

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

Exemplo 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 cadeia de caracteres brutos não são permitidos em diretivas de pré-processador:

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

Para corrigir este erro, utilize um literal de cadeia de caracteres regular:

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

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

Erros de diretiva #error e #warning

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

Esses erros ocorrem quando o compilador processa #error, #warninge #pragma warning diretivas. Essas diretivas permitem gerar mensagens de erro e aviso personalizadas durante a compilação e controlar o comportamento de aviso.

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 seguinte saída:

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

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 seguinte saída:

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

CS1634 ocorre quando uma cláusula #pragma warning está mal formada, como quando os termos "desativar" ou "restaurar" são omitidos.

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

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

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

CS1635 ocorre quando você usa a opção de linha de /nowarn comando ou configuração de projeto para desativar 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
    }
}

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, 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 de 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. 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
  • CS1694: Nome de arquivo inválido especificado para a diretiva de pré-processador. Nome do arquivo é muito longo ou não é um nome de arquivo válido
  • CS1695: Sintaxe inválida do #pragma checksum; deve ser #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1709: Nome do arquivo especificado para a diretiva de pré-processador está vazio
  • CS8938: O valor da diretiva #line está ausente ou fora do alcance
  • CS8939: A posição final da diretiva #line deve ser maior ou igual à posição inicial
  • CS9028: A diretiva #line span requer espaço antes do primeiro parêntese, antes do deslocamento de caracteres e antes do nome do arquivo

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

  • Nome de arquivo inválido ou ausente (CS1560, CS1694, CS1709).
  • Formato ou valores de número de linha incorretos (CS1576, CS8938, CS8939).
  • Falta sintaxe adequada para nomes de arquivos e comentários (CS1578).
  • Sintaxe malformada #pragma checksum (CS1695).
  • Espaçamento inadequado nas diretivas de span #line (CS9028).

Exemplo de CS1560/CS1694 - Nome de arquivo inválido especificado:

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

Exemplo 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 CS1578 - Nome do arquivo, comentário ou fim de linha esperado:

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

Exemplo CS1695 - Sintaxe de soma de verificação #pragma inválida:

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

Exemplo CS1709 - Nome do arquivo vazio:

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

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

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

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

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

Exemplo CS9028 - Espaçamento entre diretivas de #line span:

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

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

Uso incorreto de diretivas de aplicativos baseados em arquivo

  • CS9297: #: diretivas não podem ser após o primeiro token no arquivo
  • CS9298: #: diretivas só podem ser usadas em programas baseados em arquivo (-features:FileBasedProgram)
  • CS9299: #: as diretivas não podem ser posteriores à #if diretiva
  • CS9314: #! 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 arquivo seguindo o tutorial sobre aplicativos baseados em arquivo.

Arquivo contém diretivas para script.cs

Os seguintes erros 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 de arquivo citado esperado
  • CS7011: #r só é permitido em scripts
  • CS8097: #load só é permitido em scripts

Essas diretivas não são suportadas em C# compilado. Você deve removê-los, ou usar script.cs.