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.
Os seguintes erros ocorrem quando o compilador carrega geradores de origem ou interceptores durante a compilação:
-
CS9137: A funcionalidade 'interceptores' não está ativada neste espaço de nomes. Acrescenta
<Features>InterceptorsPreview</Features>ao teu projeto. - CS9138: O método 'método' não pode ser usado como interceptor porque o seu tipo contendo tem parâmetros de tipo.
- CS9139: Não é possível intercetar: a compilação não contém um arquivo com caminho.
- CS9140: Não é possível interceptar: a compilação não contém um ficheiro com path 'path'. Querias dizer usar path 'candidatePath'?
- CS9141: A linha e o número de carácter fornecidos não se referem a um nome de método interceptável, mas sim ao token 'token'.
-
CS9142: O arquivo dado tem
nlinhas, que é menor do que o númeromde linha fornecido. -
CS9143: A linha dada tem
ccaracteres, o que é menos do que o número dencaracteres fornecido. -
CS9144: Não é possível intercetar o método
Mcom o intercetorVporque as assinaturas não coincidem. - CS9145: Não é possível intercetar: o caminho não está mapeado. Caminho mapeado esperado.
- CS9146: Um método intercetor deve ser um método de membro comum.
- CS9147: A linha e o número de carácter fornecidos não se referem ao início do token 'token'. Querias usar a linha 'n' e o carácter 'c'?
-
CS9148: Interceptor deve ter um parâmetro correspondente ao parâmetro
this. -
CS9149: Intercetor não deve ter um
thisparâmetro porque o método não tem umthisparâmetro. -
CS9150: Intercetor não pode ter um caminho de
nullarquivo. -
CS9151: O nome
Mdo método possível não pode ser intercetado porque não está sendo invocado. - CS9152: Não é possível intercetar uma chamada em ficheiro com path 'path' porque vários ficheiros na compilação têm este path.
- CS9153: A chamada indicada é intercetada várias vezes.
-
CS9155: Não é possível intercetar chamada com
Mporque não está acessível dentro doV. -
CS9156: Não é possível intercetar a chamada para
McomVdevido a uma diferença nos modificadores com escopo ou nos atributos[UnscopedRef]. -
CS9157: Os números de linha e de caracteres fornecidos ao
InterceptsLocationAttributedevem ser positivos. - CS9160: Um operador nameof não pode ser interceptado.
-
CS9161: Um intercetor não pode ser marcado com
UnmanagedCallersOnlyAttribute. - CS9177: O método 'method' deve ser não genérico ou ter aridade 'arity' para corresponder a 'target'.
- CS9178: O método 'método' deve ser não genérico para corresponder ao 'alvo'.
- CS9206: Um intercetor não pode ser declarado no namespace global.
- CS9207: Não pode intercetar 'método' porque não é uma invocação de um método membro comum.
- CS9231: O argumento data para InterceptsLocationAttribute não está no formato correto.
- CS9232: A versão 'versão' do formato intercetores não é suportada. A última versão suportada é '1'.
- CS9233: Não é possível intercetar uma chamada no arquivo 'arquivo' porque ele está duplicado em outro lugar na compilação.
- CS9234: Não é possível intercetar uma chamada no arquivo 'arquivo' porque um arquivo correspondente não foi encontrado na compilação.
- CS9235: O argumento data para InterceptsLocationAttribute refere-se a uma posição inválida no arquivo 'file'.
Os seguintes avisos ocorrem quando o compilador carrega geradores de origem ou interceptores durante a compilação:
- CS8032: Uma instância de analisador 'analisador' não pode ser criada a partir de 'assembly' : 'reason'.
- CS8033: A assemblagem 'assembly' não contém analisadores.
- CS8034: Impossível carregar a assemblagem do analisador 'assembly' : 'reason'
- CS8040: Saltar alguns tipos na montagem do analisador 'assembly' devido a um ReflectionTypeLoadException : 'exception'.
- CS8700: Múltiplos ficheiros de configuração de analisadores não podem estar no mesmo diretório ('diretório').
- CS8784: O gerador 'generator' não foi possível inicializar. Não contribuirá para o resultado e podem ocorrer erros de compilação em resultado disso. A exceção era do tipo 'exception' com a mensagem 'message'.
- CS8785: Gerador 'gerador' falhou em gerar a fonte. Não contribuirá para a saída e podem ocorrer erros de compilação como resultado. A exceção era do tipo 'exceção' com mensagem 'mensagem'.
- CS8850: O conjunto 'assembly' que contém o tipo 'type' faz referência à .NET Framework, que não é suportada.
- CS9057: A assemblagem do analisador 'assembly' não pode ser utilizada porque faz referência à versão 'version' do compilador, que é mais recente do que a versão atualmente em execução 'currentVersion'.
- CS9067: Referência do analisador 'reference' especificada múltiplas vezes
-
CS9154: Intercetando uma chamada para
Mcom intercetorV, mas as assinaturas não correspondem. - CS9158: A nulabilidade dos tipos de referência no tipo de retorno não está em conformidade com o método interceptável.
- CS9159: A anulabilidade dos tipos de referência no tipo de parâmetro não corresponde ao método interceptável.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' não é suportado. Em vez disso, mude para a geração baseada em 'InterceptableLocation' desses atributos. https://github.com/dotnet/roslyn/issues/72133)(
Estes erros e avisos seguem estes temas:
Falhas nos geradores de código-fonte
- CS8784: O gerador 'generator' não foi inicializado. Não contribuirá para o resultado e, como consequência, podem ocorrer erros de compilação. Foi lançada uma exceção do tipo 'exception' com a mensagem 'message'.
- CS8785: Gerador 'gerador' falhou em gerar a fonte. Não contribuirá para a saída e podem ocorrer erros de compilação como resultado. A exceção era do tipo 'exceção' com mensagem 'mensagem'.
Estes avisos indicam que um gerador de fonte lançou uma exceção não tratada durante a compilação. Os geradores de origem funcionam como parte do pipeline de compilação, e uma falha impede o gerador de contribuir com a sua saída para a compilação. Para mais informações sobre a implementação de geradores de fonte, consulte Geradores de Fonte.
Para corrigir estes avisos, siga esta orientação:
- Examine todos os detalhes das exceções na saída da compilação para identificar a causa raiz (CS8784, CS8785). A mensagem de aviso inclui o tipo de exceção, a mensagem e o rastreio da pilha, que podem ajudar a si ou ao autor do gerador a diagnosticar a falha.
- Garantir que todas as dependências necessárias para o gerador de origem estão disponíveis no projeto (CS8784). Falhas de inicialização ocorrem frequentemente quando o gerador não consegue localizar um conjunto ou recurso necessário durante o arranque. Verifique se o pacote NuGet do gerador está corretamente instalado e que todas as dependências transitivas são resolvidas.
- Reporte a falha ao mantenedor do gerador de origem se a exceção tiver origem em código de gerador de terceiros (CS8784, CS8785). Inclua todos os detalhes das exceções do resultado da build no seu relatório de bugs.
- Se foi você que criou o gerador de código-fonte, adicione o tratamento de exceções nos seus
Initializemétodos ORExecutepara detetar e reportar erros de forma elegante (CS8784, CS8785).
Compatibilidade entre analisador e gerador de fonte
- CS8032: Uma instância de analisador 'analisador' não pode ser criada a partir de 'assembly' : 'reason'.
- CS8033: O assembly 'assembly' não contém analisadores.
- CS8034: Impossível carregar a montagem do Analisador 'assembly' : 'reason'
- CS8040: Saltar alguns tipos na montagem do analisador 'assembly' devido a um ReflectionTypeLoadException : 'exception'.
- CS8700: Múltiplos ficheiros de configuração de analisadores não podem estar no mesmo diretório ('diretório').
- CS8850: O assemblado 'assembly' que contém o tipo 'type' faz referência ao .NET Framework, que não é suportado.
- CS9057: A assemblagem do analisador 'assembly' não pode ser utilizada porque faz referência à versão 'version' do compilador, que é mais recente do que a versão atualmente em execução 'currentVersion'.
- CS9067: Referência de analisador 'reference' especificada várias vezes
Estes avisos e erros indicam problemas no carregamento, instância ou configuração dos conjuntos do analisador e do gerador de fonte. Como os geradores de fonte carregam como conjuntos de analisadores, estes diagnósticos aplicam-se tanto aos analisadores como aos geradores de fonte.
Para corrigir estes problemas, siga estas orientações:
- Atualize o seu SDK .NET ou a versão do compilador para corresponder aos requisitos do analisador, ou use uma versão mais antiga do pacote do analisador compatível com o seu compilador atual (CS9057). Este erro ocorre quando um assembly do analisador tem como alvo uma versão mais recente da API Roslyn do que a que o compilador em execução fornece.
- Remova referências duplicadas de analisadores do seu projeto (CS9067). Verifique o ficheiro do seu projeto para ver se há elementos repetidos
<Analyzer>ou<PackageReference>que incluam a mesma montagem do analisador através de caminhos diferentes. Dependências transitivas de pacotes também podem causar duplicados. - Verifica se o conjunto do analisador é um conjunto de .NET válido e não está corrompido (CS8034). Se não for possível carregar o assembly, certifique-se de que o ficheiro existe no caminho referenciado e de que foi compilado para uma plataforma de destino compatível. Reconstruir ou reinstalar o pacote NuGet para obter uma cópia nova.
- Certifique-se de que o tipo de analisador tem um construtor público sem parâmetros (CS8032). O compilador instancia analisadores chamando o seu construtor padrão. Se o construtor lançar uma exceção ou exigir parâmetros, o analisador não pode ser criado.
- Verifique se o conjunto referenciado exporta realmente os tipos de analisador ou gerador de fonte (CS8033). Um conjunto referenciado como analisador deve conter tipos que implementem
DiagnosticAnalyzerouISourceGenerator/IIncrementalGenerator. Se o assembly for uma dependência em tempo de execução e não um analisador, referencia-o como referência normal de projeto ou pacote em vez disso. - Resolver problemas de carregamento de tipos no conjunto do analisador garantindo que todas as suas dependências estão disponíveis (CS8040). Um
ReflectionTypeLoadExceptionnormalmente significa que a assemblagem referencia tipos de outras assemblagens que não consegue localizar. Certifique-se de que todas as dependências necessárias estão incluídas no pacote NuGet do analisador. - Assegure que os ficheiros de configuração do analisador (
.editorconfigou.globalconfig) são únicos por diretório (CS8700). O compilador não permite múltiplos ficheiros de configuração de analisadores no mesmo diretório porque as regras de precedência seriam ambíguas. Juntar os ficheiros ou remover o duplicado. - Atualize o analisador ou o gerador de código-fonte para ter como destino o .NET Standard ou o .NET moderno em vez do .NET Framework (CS8850). As assemblies que referenciam o .NET Framework não são suportadas na cadeia de ferramentas de compilação do .NET moderno. Se mantiveres o analisador, redirecione-o para
netstandard2.0. Se for um pacote de terceiros, atualize para uma versão que suporte .NET moderno.
Os intercetores são experimentais
-
CS9137: A funcionalidade 'interceptores' não está ativada neste espaço de nomes. Acrescenta
<Features>InterceptorsPreview</Features>ao teu projeto.
Para usar interceptores, adicione o <Features>InterceptorsPreview</Features> elemento ao ficheiro do seu projeto dentro de uma <PropertyGroup> secção (CS9137). Os interceptores são uma funcionalidade experimental e não estão ativados por defeito. Este consentimento explícito é obrigatório porque a funcionalidade de intercetores está sujeita a alterações incompatíveis ou à sua remoção em versões futuras. O compilador precisa de confirmação de que compreendes os riscos antes de permitir a sua utilização. Para mais informações sobre interceptores e as suas capacidades, consulte Interceptores na documentação de características do C# 12.
Incompatibilidade de assinatura
Os seguintes erros e avisos indicam uma incompatibilidade entre o método interceptor e o método interceptável.
-
CS9144: Não é possível intercetar o método
Mcom o intercetorVporque as assinaturas não coincidem. -
CS9148: Interceptor deve ter um parâmetro correspondente ao parâmetro
this. -
CS9149: Intercetor não deve ter um
thisparâmetro porque o método não tem umthisparâmetro. -
CS9155: Não é possível intercetar chamada com
Mporque não está acessível dentro doV. -
CS9156: Não é possível interceptar a chamada para
McomVdevido a uma diferença em modificadores 'com escopo' ou atributos[UnscopedRef]. - CS9177: O método 'method' deve não ser genérico ou ter aridade 'arity' para corresponder a 'target'.
- CS9178: O método 'método' deve ser não genérico para corresponder ao 'alvo'.
Além disso, os seguintes avisos indicam uma incompatibilidade nas assinaturas do intercetor e do método interceptável:
-
CS9154: Intercetando uma chamada para
Mcom intercetorV, mas as assinaturas não correspondem. - CS9158: A nulabilidade dos tipos de referência no tipo de retorno não está de acordo com o método interceptável.
- CS9159: A anulabilidade dos tipos de referência no tipo de parâmetro não corresponde ao método interceptável.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' não é suportado. Em vez disso, mude para a geração baseada em 'InterceptableLocation' desses atributos. https://github.com/dotnet/roslyn/issues/72133)(
Para corrigir estes problemas, certifique-se de que o seu método interceptor corresponde aos requisitos de assinatura e acesso do método interceptável:
- Garantir que a assinatura do método interceptor corresponde exatamente ao método interceptável (CS9144,CS9154). Os tipos de parâmetros, modificadores, ordem e tipo de retorno devem ser idênticos. Revise ambas as declarações de métodos e alinhe as suas assinaturas.
- Adicione um
thisparâmetro ao seu interceptor quando o método interceptável for um método de instância (CS9148), ou remova othisparâmetro quando o método interceptável for estático (CS9149). Os interceptores de instância requerem umthisparâmetro do tipo declarante, enquanto os interceptores estáticos não devem ter um. - Declare o interceptor num local onde o método interceptável esteja acessível (CS9155). Se o método interceptável for
internal, o interceptor deve estar no mesmo conjunto. Se forprivate, o interceptor deve ser do mesmo tipo ou de um tipo aninhado. - Alinhe os
scopedmodificadores e[UnscopedRef]atributos nos respectivosrefparâmetros (CS9156). Cadarefparâmetro no interceptor deve ter as mesmas anotações de vida útil que o parâmetro correspondente no método interceptável para garantir a segurança da memória. - Certifique-se de que ambos os métodos têm aridade genérica correspondente (CS9177,CS9178). Se o método interceptável for não genérico, o interceptor também deve ser não genérico. Se o método interceptável tiver parâmetros de tipo, o interceptor deve ter o mesmo número de parâmetros de tipo com restrições compatíveis.
- Compare as anotações de anulabilidade no tipo de retorno (CS9158) e nos tipos de parâmetros (CS9159). Ative os tipos de referência anuláveis no seu projeto e assegure que as anotações de anulabilidade do interceptor correspondem exatamente ao método interceptável para manter a segurança do tipo.
- Use a geração atualizada
InterceptableLocationbaseada em paraInterceptsLocationAttributeem vez do construtor obsoleto(string, int, int)(CS9270). O formato mais recente oferece melhor suporte de ferramentas e validação em tempo de compilação. Consulte a edição do GitHub para orientações sobre migração.
Mapeamento incorreto
Os intercetores exigem um mapeamento de origem que mapeie o método interceptável e o método intercetor. Os seguintes erros indicam um problema com o mapeamento:
- CS9139: Não é possível intercetar: a compilação não contém um arquivo com caminho.
- CS9140: Não é possível interceptar: a compilação não contém um ficheiro com path 'path'. Querias dizer usar path 'candidatePath'?
- CS9141: A linha e o número de carácter fornecidos não se referem a um nome de método interceptável, mas sim ao token 'token'.
-
CS9142: O arquivo dado tem
nlinhas, que é menor do que o númeromde linha fornecido. -
CS9143: A linha dada tem
ccaracteres, que é menor do que o númeronde caracteres fornecido. - CS9145: Não é possível intercetar: o caminho não está mapeado. Caminho mapeado esperado.
- CS9147: A linha e o número de carácter fornecidos não se referem ao início do token 'token'. Querias usar a linha 'n' e o carácter 'c'?
-
CS9150: Intercetor não pode ter um caminho de
nullarquivo. -
CS9157: Os números de linha e caracteres fornecidos para
InterceptsLocationAttributedevem ser positivos.
Para corrigir erros de mapeamento, certifique-se de que contém InterceptsLocationAttribute caminhos de ficheiro válidos e informações de posição precisas:
- Verifica se o caminho do ficheiro corresponde exatamente a um ficheiro na tua compilação (CS9139, CS9140). Use o caminho exato conforme aparece no seu projeto, incluindo a carcaça correta e os separadores de diretórios. Se o compilador sugerir um caminho alternativo, atualize o seu atributo para usar esse caminho.
- Use caminhos de ficheiros mapeados ao trabalhar com geradores de origem que transformam caminhos de ficheiros (CS9145). Os geradores de fonte frequentemente remapeiam caminhos para ficheiros gerados, e deve usar o caminho mapeado que o compilador reconhece, não o caminho de origem original.
- Certifica-te de que o caminho do ficheiro não é
nullno teuInterceptsLocationAttribute(CS9150). Cada interceção deve especificar um caminho de ficheiro válido, não nulo, que identifique o ficheiro de origem que contém a chamada para interceção. - Forneça números de linha e caracteres positivos, baseados em 1 (CS9157). Os números das linhas e as posições dos caracteres devem começar em 1, não em 0. Verifica se o teu gerador de origem usa indexação baseada em 1 ao calcular posições.
- Aponte para o exato início do nome do método token (CS9141, CS9147). Os números da linha e dos caracteres devem identificar o primeiro carácter do nome do método na invocação, não espaços em branco, operadores ou outros tokens. Se o compilador sugerir coordenadas alternativas, use-as para direcionar o token de início correto.
- Mantenha-se dentro dos limites do ficheiro (CS9142, CS9143). Verifica se o número de linha não ultrapassa o total de linhas e se o número de caracteres não excede o comprimento da linha. Recalcule as posições se o ficheiro fonte tiver mudado desde que o atributo foi gerado.
Declaração de intercetor incorreta
Os seguintes erros indicam problemas com declarações de interceptores, incluindo problemas com o InterceptsLocationAttribute formato ou violações das regras dos interceptores:
- CS9138: O método 'método' não pode ser usado como interceptor porque o seu tipo contendo tem parâmetros de tipo.
- CS9146: Um método interceptador deve ser um método membro regular.
-
CS9151: O nome
Mdo método possível não pode ser intercetado porque não está sendo invocado. - CS9152: Não é possível intercetar uma chamada em ficheiro com path 'path' porque vários ficheiros na compilação têm este path.
- CS9153: A chamada indicada é intercetada várias vezes.
- CS9160: O operador nameof não pode ser intercetado.
-
CS9161: Um intercetor não pode ser marcado com
UnmanagedCallersOnlyAttribute. - CS9206: Um intercetor não pode ser declarado no namespace global.
- CS9207: Não pode intercetar 'método' porque não é uma invocação de um método membro comum.
- CS9231: O argumento data para InterceptsLocationAttribute não está no formato correto.
- CS9232: A versão 'versão' do formato de interceptores não é suportada. A versão mais recente suportada é '1'.
- CS9233: Não é possível intercetar uma chamada no arquivo 'arquivo' porque ele está duplicado em outro lugar na compilação.
- CS9234: Não é possível intercetar uma chamada no arquivo 'arquivo' porque um arquivo correspondente não foi encontrado na compilação.
- CS9235: O argumento data para InterceptsLocationAttribute refere-se a uma posição inválida no arquivo 'file'.
Para corrigir erros na declaração do interceptor, siga estas regras para declarações InterceptsLocationAttribute e utilização válidas do interceptor:
- Formate corretamente o
InterceptsLocationAttributeargumento de dados (CS9231). O atributo requer dados especificamente estruturados que codifiquem a informação do caminho e da posição do ficheiro. Assegure que o seu gerador de fontes produz dados no formato esperado, correspondendo à especificação atual dos interceptores. - Use a versão '1' no seu
InterceptsLocationAttribute(CS9232), porque é a versão mais recente suportada. Atualize o seu gerador de origem para gerar atributos de formato da versão 1 em vez de números de versão não suportados. - Assegure caminhos de ficheiros únicos na sua compilação (CS9233,CS9234). Quando a compilação contém caminhos de ficheiros duplicados, renomeie ou reorganize os ficheiros para tornar cada caminho único. Verifique se o caminho do ficheiro no atributo corresponde a um ficheiro realmente incluído na compilação.
- Valide os dados de posição em relação a localizações de código válidas (CS9235). Os números da linha e dos caracteres devem referenciar um ponto de interceção válido dentro do ficheiro especificado. Regenerar o atributo se o ficheiro fonte mudou ou se a posição estiver fora dos limites do ficheiro.
- Declare métodos intercetores não genéricos em tipos não genéricos (CS9138). Os interceptores não podem ser declarados em tipos que tenham parâmetros de tipo. Se precisar de intercetar um método genérico, crie um interceptor não genérico num tipo contentor não genérico que funcione com o tipo construído específico.
- Transforme os interceptores em métodos comuns (CS9146). Interceptores não podem ser operadores, construtores, finalizadores, propriedades ou indexadores. Declara o teu interceptor como um método estático ou de instância normal.
- Intercetar invocações reais de métodos, não expressões (CS9151, CS9207). Só pode intercetar chamadas para métodos membros normais que estejam a ser invocados. Não é possível intercetar grupos de métodos, delegados ou métodos referenciados sem invocação. Garantir que a localização interceptável identifica uma chamada de método real.
- Remover tentativas de interceção duplicadas (CS9153). Cada chamada de método só pode ser interceptada uma vez. Se várias
InterceptsLocationAttributeinstâncias tiverem como alvo a mesma chamada, remova todas exceto uma para resolver a ambiguidade. - Não intercepte
nameofoperadores (CS9160). Onameofoperador não invoca métodos em tempo de execução, por isso não pode ser interceptado. Só interceta chamadas de método reais que sejam executadas em tempo de execução. - Remover
UnmanagedCallersOnlyAttributedos interceptores (CS9161). Os interceptores devem ser chamáveis a partir de código gerido e não podem ser marcados comUnmanagedCallersOnlyAttribute. Remova o atributo da declaração do método interceptor. - Declarar interceptores dentro de um namespace (CS9206). Os interceptores não podem ser declarados no namespace global e devem estar contidos em pelo menos uma declaração de namespace. Envolva a sua classe interceptor num namespace.
- Resolver caminhos duplicados de ficheiros ao nível de compilação (CS9152). Quando vários ficheiros partilham o mesmo caminho na compilação, o compilador não consegue determinar qual o ficheiro a interceptar. Garanta que a configuração da build produz caminhos de ficheiros únicos ou use uma estratégia de organização diferente para os seus ficheiros de origem.