Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo aborda os seguintes avisos do compilador:
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058: O recurso não está disponível. Use uma versão de linguagem mais recente.
- CS8058: O recurso é experimental.
- CS8192: A versão de linguagem fornecida não tem suporte ou é inválida
- CS8303: A versão de linguagem especificada não pode ter zeros à esquerda
- CS8304: A versão do compilador é menor que a versão da linguagem
- CS1738: As especificações de argumento nomeado devem aparecer depois que todos os argumentos fixos forem especificados.
- CS8306: O nome do elemento da tupla é inferido.
- CS8314: Uma expressão de tipo não pode ser manipulada por um padrão de tipo
- CS8371: Os atributos direcionados a campo em propriedades automáticas não são suportados na versão da linguagem
-
CS8401: Para usar
@$em vez de$@para uma cadeia de caracteres verbatim interpolada, use uma versão de linguagem mais recente. - CS8511: Uma expressão de tipo não pode ser manipulada por um padrão de tipo.
- CS8627: Um parâmetro de tipo que permite valor nulo deve ser sabidamente um tipo de valor ou um tipo de referência não anulável
- CS8630: Opções anuláveis inválidas. Use uma versão mais recente da linguagem
- CS8652: O modificador não é válido para este item.
- CS8704: O tipo não implementa o membro da interface. Ele não pode implementar implicitamente um membro não público.
- CS8706: O tipo não pode implementar o membro da interface porque um recurso não está disponível nesta versão.
- CS8904: Variação inválida: o parâmetro de tipo deve ser válido.
- CS8912: Não há suporte para herdar de um registro com um 'Object.ToString' selado.
- CS8919: não é possível implementar o membro da interface especificado no tipo porque o runtime de destino não dá suporte a membros abstratos estáticos em interfaces
- CS8929: o método não pode implementar o membro da interface no tipo porque o runtime de destino não dá suporte a membros abstratos estáticos em interfaces.
- CS8957: A expressão condicional não é válida na versão de linguagem porque um tipo comum não foi encontrado entre tipos.
- CS8967: Não há suporte para novas linhas dentro de uma cadeia de caracteres interpolada não verbatim em C#
- CS9041: requer um recurso do compilador que não tem suporte nesta versão do compilador C#.
- CS9014: Erro: uso de uma propriedade que pode não ter sido atribuída. Atualize para atribuir automaticamente um valor padrão à propriedade.
- CS9015: Erro: uso de campo possivelmente não atribuído. Atualize para padronizar automaticamente o campo.
- CS9016: Aviso: uso de propriedade possivelmente não atribuída. Atualize para definir automaticamente um padrão para a propriedade.
- CS9017: Aviso: uso de campo possivelmente não atribuído. Atualize para padronizar automaticamente o campo.
- CS9064: O runtime de destino não dá suporte a campos ref.
- CS9103: Definição em um módulo com uma versão refSafetyRulesAttribute não reconhecida, esperando '11'.
- CS9171: O runtime de destino não dá suporte a tipos de matriz embutidos.
-
CS9194: O argumento pode não ser passado com a palavra-chave
ref. Para passar argumentosrefpara parâmetrosin, atualize para o idioma versão 12 ou superior. - CS9202: O recurso não está disponível no C# 12.0. Use uma versão de linguagem mais recente
- CS9211: O argumento diagnosticId para o atributo 'Experimental' deve ser um identificador válido.
- CS9240: O runtime de destino não dá suporte a genéricos by-ref-like.
- CS9260: O recurso não está disponível no C# 13.0. Por favor, use a versão mais recente do idioma*
- CS9268: o tipo é apenas para fins de avaliação e está sujeito a alterações ou remoção em atualizações futuras. Suprime esse diagnóstico para continuar.
- CS9269: UnscopedRefAttribute só é válido no C# 11 ou posterior ou quando direcionado a net7.0 ou posterior.
-
CS9271: O tipo '
Microsoft.CodeAnalysis.EmbeddedAttribute' deve ser não genérico, interno, lacrado, não estático, ter um construtor sem parâmetros, herdar de System.Attribute e ser capaz de ser aplicado a qualquer tipo. - CS9327: O recurso não está disponível no C# 14.0. Use a versão do idioma mais recente.
- CS9328: O método usa um recurso que não é compatível com a assíncrona de runtime atualmente.
Além disso, os seguintes erros e avisos estão relacionados a alterações de inicialização de struct em versões recentes:
- CS0171, CS8881: O campo de suporte da propriedade autoimplementada 'name' deve ser totalmente atribuído antes de o controle ser retornado ao chamador.
- CS0188, CS8885: O objeto 'this' não pode ser usado antes que todos os seus campos sejam atribuídos
- CS0843, CS8880: O campo de suporte da propriedade autoimplementada 'name' deve ser totalmente atribuído antes de o controle ser retornado ao chamador
- CS8305: O recurso é apenas para fins de avaliação e está sujeito a alterações ou remoção em atualizações futuras.
- CS9204: O tipo é apenas para fins de avaliação e está sujeito a alterações ou remoção em atualizações futuras. Suprime esse diagnóstico para continuar.
A causa por trás de todos esses erros e avisos é que o compilador instalado dá suporte a uma versão mais recente do C# do que a versão selecionada pelo projeto. O compilador C# pode estar em conformidade com qualquer versão anterior. Você pode validar a sintaxe em relação a uma versão anterior do C# ou porque seu projeto deve dar suporte a bibliotecas ou runtimes mais antigos.
Há duas causas possíveis e três maneiras de resolver esses erros e avisos.
Atualizar o framework de destino
O compilador determina um padrão com base nestas regras:
| Destino | Versão | Padrão da versão da linguagem 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 | todos | C# 7.3 |
Se a estrutura selecionada não corresponder à versão de linguagem necessária, você poderá atualizar a estrutura de destino.
Selecionar a versão da linguagem correspondente
Você pode ter uma estrutura de destino mais antiga selecionada no arquivo de projeto. Se você remover o elemento LangVersion do arquivo de projeto, o compilador usará o valor padrão listado na seção anterior. A tabela a seguir mostra todas as versões atuais da linguagem C#. Você também pode especificar uma versão de idioma específica para habilitar recursos mais recentes.
| Valor | Significado |
|---|---|
preview |
O compilador aceita todas as sintaxes de linguagem válidas da versão prévia mais recente. |
latest |
O compilador aceita a sintaxe da mais recente versão lançada (incluindo a versão menor). |
latestMajorou default |
O compilador aceita a sintaxe da versão principal mais recente lançada do compilador. |
15.0 |
O compilador aceita apenas a sintaxe incluída no C# 15 ou inferior. |
14.0 |
O compilador aceita apenas a sintaxe incluída no C# 14 ou inferior. |
13.0 |
O compilador aceita somente a sintaxe incluída no C# 13 ou inferior. |
12.0 |
O compilador aceita somente a sintaxe incluída no C# 12 ou versão inferior. |
11.0 |
O compilador aceita somente a sintaxe incluída no C# 11 ou inferior. |
10.0 |
O compilador aceita somente a sintaxe incluída no C# 10 ou inferior. |
9.0 |
O compilador aceita somente a sintaxe incluída no C# 9 ou inferior. |
8.0 |
O compilador aceita somente a sintaxe incluída no C# 8.0 ou inferior. |
7.3 |
O compilador aceita somente a sintaxe incluída no C# 7.3 ou inferior. |
7.2 |
O compilador aceita somente a sintaxe incluída no C# 7.2 ou inferior. |
7.1 |
O compilador aceita somente a sintaxe incluída no C# 7.1 ou inferior. |
7 |
O compilador aceita somente a sintaxe incluída no C# 7.0 ou inferior. |
6 |
O compilador aceita somente a sintaxe incluída no C# 6.0 ou inferior. |
5 |
O compilador aceita somente a sintaxe incluída no C# 5.0 ou inferior. |
4 |
O compilador aceita somente a sintaxe incluída no C# 4.0 ou inferior. |
3 |
O compilador aceita somente a sintaxe incluída no C# 3.0 ou inferior. |
ISO-2ou 2 |
O compilador aceita somente a sintaxe incluída no ISO/IEC 23270:2006 C# (2.0). |
ISO-1ou 1 |
O compilador aceita somente a sintaxe incluída no ISO/IEC 23270:2003 C# (1.0/1.2). |
Saiba mais sobre as versões de linguagem com suporte para cada versão da estrutura no artigo sobre Configurar versão do idioma na seção de referência de linguagem.
Evite usar o recurso atualizado
Se você precisar dar suporte a bibliotecas ou runtimes mais antigos, talvez seja necessário evitar o uso de recursos mais recentes.
Habilitar recursos experimentais
O diagnóstico para recursos experimentais pode ser desabilitado para usar o recurso experimental.
Aviso
Os recursos experimentais estão sujeitos a alterações. As APIs podem ser alteradas ou podem ser removidas em atualizações futuras. Incluir recursos experimentais é uma maneira de os autores da biblioteca receberem comentários sobre ideias e conceitos para desenvolvimento futuro. Tenha extrema cautela ao usar qualquer recurso marcado como experimental.
Você também pode declarar seus próprios recursos experimentais usando o System.Diagnostics.CodeAnalysis.ExperimentalAttribute. O compilador emitirá CS9211 se o identificador usado para o recurso experimental não for um identificador válido.
Alterações interruptivas na inicialização do struct
Todos esses erros e avisos ajudam a garantir que os tipos struct sejam inicializados corretamente antes que seus campos sejam acessados. Em versões anteriores do C#, você deve atribuir explicitamente todos os campos em um struct em qualquer construtor. O construtor sem parâmetros inicializa todos os campos para seu valor padrão. Em versões posteriores, todos os construtores inicializam todos os campos. O campo é definido explicitamente, definido em um inicializador de campo ou definido como seu valor padrão.
- CS0171, CS8881: O campo de apoio da propriedade autoimplementada 'name' deve ser completamente atribuído antes que o controle seja devolvido ao chamador.
- CS0188, CS8885: O objeto 'this' não pode ser usado antes que todos os seus campos sejam atribuídos
- CS0843, CS8880: O campo de apoio para a propriedade autoimplementada 'name' deve estar totalmente atribuído antes que o controle seja devolvido ao chamador
Você pode resolver esse erro atualizando sua versão de linguagem para C# 11. Cada construtor struct inicializa todos os campos. Se essa não for uma opção possível, você deverá chamar explicitamente o construtor padrão, conforme mostrado no seguinte exemplo:
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 da implementação
-
CS9271: O tipo '
Microsoft.CodeAnalysis.EmbeddedAttribute' deve ser não genérico, interno, lacrado, não estático, ter um construtor sem parâmetros, herdar de System.Attribute e ser capaz de ser aplicado a qualquer tipo.
O compilador gera a origem desse atributo quando necessário para o código-fonte. Você não deve declarar esse tipo.