Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
- CS8301: Nome inválido para um símbolo de pré-processamento; 'nome do símbolo' não é um identificador válido
- 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 aplicações baseadas em ficheiros (-features:FileBasedProgram) -
CS9299:
#:as diretivas não podem ser posteriores à#ifdiretiva -
CS9314:
#!as diretivas só podem ser usadas em scripts ou aplicações baseadas em ficheiros - CS9378: '#!' devem ser os primeiros caracteres na primeira linha do ficheiro
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
- CS1032: Não é possível definir/desdefinir símbolos de pré-processador após o primeiro token no ficheiro
- 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).
- Colocar uma diretiva
#defineou#undefdepois do 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:
class Test { }
#define X // CS1032 - directive appears after the first token
Para corrigir este erro, coloque todas as diretivas #define e #undef antes do primeiro token no ficheiro:
#define X
#undef Y
class Test { }
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.
Nomes inválidos de símbolos de pré-processadores
- CS8301: Nome inválido para um símbolo de pré-processamento; 'nome do símbolo' não é um identificador válido
Ao criar CSharpParseOptions programaticamente, forneça cada símbolo de compilação condicional como um nome com a forma de um identificador. O primeiro carácter deve ser válido no início de um identificador C#, e os restantes caracteres devem ser caracteres identificadores válidos. O Roslyn também aceita texto de palavra-chave como um nome de símbolo, mas não adicione o prefixo @. Não inclua espaços em branco, pontuação como . ou -, uma atribuição como FEATURE=1, ou uma expressão condicional completa.
Um símbolo de pré-processamento regista apenas se o seu nome está definido. Não armazena um valor. Nomes inválidos fornecidos através da propriedade de projeto DefineConstants ou da -define opção do compilador produzem CS2029 em vez disso; ver DefineConstants.
Erros de diretiva #error e #warning
- CS1029: #error: 'texto'
- 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 ficheiro inválido especificado para diretiva do pré-processador. O nome do ficheiro é demasiado longo ou não é válido.
- CS1576: O número de linha especificado na diretiva #line está ausente ou é inválido.
- CS1578: Nome do ficheiro, comentário de linha única ou fim de linha esperado.
- CS1694: Nome de ficheiro inválido especificado para diretiva de pré-processador. O nome de ficheiro é demasiado longo ou não é válido.
- CS1695: Sintaxe de checksum #pragma inválida; deve ser #pragma checksum "nome do ficheiro" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX...".
- CS1709: O nome do ficheiro especificado para a diretiva do pré-processador está vazio.
- CS8938: O valor da diretiva #line está em falta ou fora do intervalo.
- 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 do carácter e antes do nome do ficheiro.
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 ficheiro, 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 aplicações baseadas em ficheiros (-features:FileBasedProgram) -
CS9299:
#:as diretivas não podem ser posteriores à#ifdiretiva -
CS9314:
#!as diretivas só podem ser usadas em scripts ou aplicações baseadas em ficheiros - CS9378: '#!' devem ser os primeiros caracteres na primeira linha do ficheiro
Estes erros indicam que usou incorretamente as diretivas #: ou #!. Para saber mais sobre a sintaxe destas diretivas, consulte o artigo sobre diretivas de pré-processador na secção sobre aplicações baseadas em ficheiros. Ou pode explorar aplicações baseadas em ficheiros seguindo o tutorial sobre aplicações baseadas em ficheiros.
Um shebang (#!) seleciona o executável para um script ou aplicação baseada em ficheiros. Coloque-o no primeiro carácter da primeira linha, antes de qualquer espaço em branco, comentários ou linhas em branco (CS9378); consulte a orientação de diretiva de aplicação baseada em ficheiros.
Arquivo contém diretivas para script.cs
Os seguintes erros indicam uso ou colocação incorreta de diretivas de script C#:
- 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 ficheiro
Num script C# (.csx), uma #load diretiva após um token produz CS8098:
System.Console.WriteLine("This is the first token.");
#load "helpers.csx" // CS8098
Para corrigir CS8098, mova todas as diretivas #load antes de cada token do script:
#load "helpers.csx"
System.Console.WriteLine("The directive precedes the first token.");
Num ficheiro fonte normal em C# (.cs), #load não é permitido. Essa condição relacionada produz CS8097, não CS8098. Remover #load dos ficheiros de origem normais.