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.
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. Utilize uma versão linguística mais recente.
- CS8058: O recurso é experimental.
- CS8192: Versão de idioma fornecida não é suportada ou inválida
- CS8303: Versão de idioma especificado não pode ter zeros à esquerda
- CS8304: Versão do compilador é menor do que a versão de idioma
- CS1738: As especificações de argumento nomeado devem aparecer depois que todos os argumentos fixos tiverem sido especificados.
- CS8306: O nome do elemento Tuple é inferido.
- CS8314: Uma expressão de tipo não pode ser manipulada por um padrão de tipo
- CS8371: Atributos direcionados a campo em propriedades automáticas não são suportados na versão de idioma
-
CS8401: Para usar
@$em vez de$@para uma cadeia de caracteres interpolada literal, use a versão mais recente da linguagem de programação. - CS8511: Uma expressão de tipo não pode ser manipulada por um padrão de tipo.
- CS8627: Um parâmetro de tipo anulável deve ser conhecido por ser um tipo de valor ou um tipo de referência não anulável
- CS8630: Opções anuláveis inválidas. Utilizar a versão linguística mais recente
- CS8652: O modificador não é válido para este item.
- CS8704: O tipo não implementa o membro da interface. 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 type 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 tempo de execução de destino não suporta membros abstratos estáticos em interfaces
- CS8929: Método não pode implementar membro da interface no tipo porque o tempo de execução alvo não suporta membros abstratos estáticos em interfaces.
- CS8957: A expressão condicional não é válida na versão de idioma porque um tipo comum não foi encontrado entre os tipos.
- CS8967: Novas linhas dentro de uma cadeia de caracteres interpolada não literal não são suportadas em C#
- CS9041: Requer uma funcionalidade do compilador que não é suportada por esta versão do compilador C#.
- CS9014: Erro: Uso de propriedade possivelmente não atribuída. Atualize para o padrão automático da propriedade.
- CS9015: Erro: Uso de campo possivelmente não atribuído. Atualize para que o campo tenha um valor padrão automático.
- CS9016: Aviso: Uso de propriedade possivelmente não atribuída. Atualize para o padrão automático da propriedade.
- CS9017: Aviso: Uso de campo potencialmente desatribuído. Configure o campo para valores padrão automáticos.
- CS9064: O runtime de destino não suporta campos ref.
- CS9103: Definição em um módulo com uma versão não reconhecida de RefSafetyRulesAttribute, esperando '11'.
- CS9171: O tempo de execução de destino não suporta tipos de matriz em linha.
-
CS9194: Argumento não pode ser passado com a
refpalavra-chave. Para passarrefargumentos parainparâmetros, atualize para a versão de idioma 12 ou superior. - CS9202: O recurso não está disponível no C# 12.0. Utilize a versão linguística mais recente
- CS9211: O argumento diagnosticId para o atributo 'Experimental' deve ser um identificador válido.
- CS9240: O tempo de execução de destino não é compatível com genéricos by-ref-like.
- CS9260: O recurso não está disponível no C# 13.0. Utilize a versão linguística mais recente*
- CS9268: O tipo é apenas para fins de avaliação e está sujeito a alterações ou remoção em atualizações futuras. Suprima este diagnóstico para prosseguir.
- CS9269: UnscopedRefAttribute é válido apenas em C# 11 ou posterior, ou quando direcionado para net7.0 ou posterior.
-
CS9271: O tipo '
Microsoft.CodeAnalysis.EmbeddedAttribute' deve ser não-genérico, interno, selado, 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. Utilize uma versão linguística mais recente.
- CS9328: Método usa um recurso que não é suportado pelo ambiente de execução assíncrono atualmente.
Além disso, os seguintes erros e avisos estão relacionados a alterações de inicialização struct em versões recentes:
- CS0171, CS8881: O campo de suporte para 'nome' da propriedade implementada automaticamente deve ser totalmente atribuído antes que o controle seja retornado ao chamador.
- CS0188, CS8885: O objeto 'this' não pode ser usado antes que todos os seus campos sejam atribuídos a
- CS0843, CS8880: O campo de suporte para 'nome' da propriedade implementada automaticamente deve ser totalmente atribuído antes que o controle seja 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. Suprima este diagnóstico para prosseguir.
A causa por trás de todos esses erros e avisos é que o compilador instalado suporta uma versão mais recente do C# do que a versão que seu projeto selecionou. 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 oferecer suporte a bibliotecas ou tempos de execução mais antigos.
Há duas causas possíveis e três maneiras de resolver esses erros e avisos.
Atualize o seu framework alvo
O compilador determina um padrão com base nestas regras:
| Objetivo | Versão | Padrão da versão do idioma 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 |
| Núcleo do .NET | 3.x | C# 8.0 |
| Núcleo do .NET | 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 idioma necessária, você poderá atualizar a estrutura de destino.
Selecione a versão do idioma correspondente
Você pode ter uma estrutura de destino mais antiga selecionada em seu arquivo de projeto. Se você remover o LangVersion elemento 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 do idioma C#. Você também pode especificar uma versão de idioma específico para habilitar recursos mais recentes.
| Valor | Significado |
|---|---|
preview |
O compilador aceita toda a sintaxe de idioma válida da versão de visualização mais recente. |
latest |
O compilador aceita a sintaxe da versão mais recente lançada do compilador (incluindo a versão menor). |
latestMajorou default |
O compilador aceita a sintaxe da última versão principal do compilador. |
15.0 |
O compilador aceita apenas a sintaxe incluída em C# 15 ou inferior. |
14.0 |
O compilador aceita apenas a sintaxe incluída no C# 14 ou inferior. |
13.0 |
O compilador aceita apenas a sintaxe incluída no C# 13 ou inferior. |
12.0 |
O compilador aceita apenas a sintaxe incluída no C# 12 ou inferior. |
11.0 |
O compilador aceita apenas a sintaxe incluída no C# 11 ou inferior. |
10.0 |
O compilador aceita apenas a sintaxe incluída no C# 10 ou inferior. |
9.0 |
O compilador aceita apenas a sintaxe incluída no C# 9 ou inferior. |
8.0 |
O compilador aceita apenas a sintaxe incluída no C# 8.0 ou inferior. |
7.3 |
O compilador aceita apenas a sintaxe incluída no C# 7.3 ou inferior. |
7.2 |
O compilador aceita apenas a sintaxe incluída no C# 7.2 ou inferior. |
7.1 |
O compilador aceita apenas a sintaxe incluída no C# 7.1 ou inferior. |
7 |
O compilador aceita apenas a sintaxe incluída no C# 7.0 ou inferior. |
6 |
O compilador aceita apenas a sintaxe incluída no C# 6.0 ou inferior. |
5 |
O compilador aceita apenas a sintaxe incluída no C# 5.0 ou inferior. |
4 |
O compilador aceita apenas a sintaxe incluída no C# 4.0 ou inferior. |
3 |
O compilador aceita apenas a sintaxe incluída no C# 3.0 ou inferior. |
ISO-2ou 2 |
O compilador aceita apenas a sintaxe incluída na ISO/IEC 23270:2006 C# (2.0). |
ISO-1ou 1 |
O compilador aceita apenas a sintaxe incluída na ISO/IEC 23270:2003 C# (1.0/1.2). |
Você pode saber mais sobre as versões de idioma suportadas para cada versão da estrutura no artigo Configurar versão de idioma na seção de referência de idioma.
Evite o recurso atualizado
Se você precisar oferecer suporte a bibliotecas ou tempos de execução mais antigos, talvez seja necessário evitar o uso de recursos mais recentes.
Ativar funcionalidades experimentais
O diagnóstico para recursos experimentais pode ser desativado para usar o recurso experimental.
Aviso
As características experimentais estão sujeitas a alterações. As APIs podem ser alteradas ou removidas em atualizações futuras. A inclusão de recursos experimentais é uma maneira de os autores de bibliotecas obterem feedback sobre ideias e conceitos para desenvolvimento futuro. Tenha muito cuidado 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 emite CS9211 se o identificador usado para o recurso experimental não for um identificador válido.
Quebrando alterações na inicialização do struct
Todos esses erros e avisos ajudam a garantir que os tipos sejam inicializados corretamente antes que struct 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 com seu valor padrão. Em versões posteriores, todos os construtores inicializam todos os campos. O campo é explicitamente definido, definido em um inicializador de campo ou definido como seu valor padrão.
- CS0171, CS8881: O campo de apoio para 'nome' da propriedade implementada automaticamente deve ser totalmente atribuído antes que o controle seja retornado ao chamador.
- CS0188, CS8885: O objeto 'this' não pode ser usado antes que todos os seus campos sejam atribuídos a
- CS0843, CS8880: O campo de armazenamento para a propriedade 'nome', implementada automaticamente, deve ser totalmente atribuído antes de o controle ser devolvido ao chamador
Você pode resolver esse erro atualizando sua versão de idioma para C# 11, cada struct construtor inicializa todos os campos. Se essa não for uma opção possível, você deve chamar explicitamente o construtor padrão, conforme mostrado no exemplo a seguir:
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, selado, 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 fonte para este atributo quando necessário para o seu código-fonte. Você não deve declarar esse tipo.