Códigos de erro de validação de pacote/assembly
Este artigo de referência lista todos os códigos de erro gerados pela validação do pacote e pela validação do assembly.
Lista de códigos de erro
ID do diagnóstico | Descrição | Ação recomendada |
---|---|---|
PKV001 | Um ativo de tempo de compilação para uma estrutura compatível está ausente. | Adicione a estrutura de destino apropriada ao projeto. |
PKV002 | Um ativo em tempo de execução para uma estrutura compatível e runtime está ausente. | Adicione o ativo apropriado para o runtime correspondente ao pacote. |
PKV003 | Um ativo independente em tempo de execução para uma estrutura compatível está ausente. | Adicione a estrutura de destino independente de tempo de execução apropriada ao projeto. |
PKV004 | Um ativo de tempo de execução compatível para um ativo de tempo de compilação está ausente. | Adicione o ativo de tempo de execução apropriado ao pacote. |
PKV005 | Um ativo de tempo de execução compatível para um ativo de tempo de compilação e um identificador de runtime com suporte está ausente. | Adicione o ativo de tempo de execução apropriado ao pacote. |
PKV006 | A estrutura de destino é descartada na versão mais recente. | Adicione a estrutura de destino apropriada ao projeto. |
PKV007 | A estrutura de destino e o par de identificadores de runtime são descartados na versão mais recente. | Adicione a estrutura de destino apropriada e o RID ao projeto. |
CP0001 | Um tipo, uma enumeração, um registro ou um struct visível fora do assembly está ausente no assembly comparado quando necessário para estar presente. | Adicione o tipo ausente ao assembly em que ele está ausente. |
CP0002 | Um membro que está visível fora do assembly está ausente no assembly comparado quando precisava estar presente. | Adicione o membro ausente ao assembly em que ele está ausente. |
CP0003 | Parte da identidade do assembly (nome, token de chave pública, cultura, atributo redirecionável ou versão) não corresponde em ambos os lados da comparação. | Atualize a identidade do assembly para que ambos os lados correspondam. |
CP0004 | Um assembly correspondente não foi encontrado em um lado da comparação ao criar o mapeamento do assembly. | Verifique se o assembly ausente foi adicionado ao pacote. |
CP0005 | Um membro abstract foi adicionado ao lado direito da comparação a um tipo não selado. |
Remova o membro ou não o anote como abstract . |
CP0006 | Um membro foi adicionado a uma interface sem uma implementação padrão. | Se a estrutura de destino e a versão da linguagem derem suporte a implementações padrão, adicione uma ou apenas remova o membro da interface. |
CP0007 | Um tipo base na hierarquia de classe foi removido de um dos lados comparados. | Adicione o tipo base de volta. (Um novo tipo de base pode ser introduzido na hierarquia, se isso for pretendido.) |
CP0008 | Uma interface base foi removida da hierarquia de interface de um dos lados comparados. | Adicione a interface de volta à hierarquia. |
CP0009 | Um tipo que não foi selado de um lado foi anotado como sealed do outro lado comparado. |
Remova a anotação sealed do tipo. |
CP0010 | O tipo subjacente de uma enumeração foi alterado de um lado para outro. | Altere o tipo subjacente de volta para o que era antes. |
CP0011 | O valor de um membro em uma enumeração foi alterado de um lado para outro. | Altere o valor do membro de volta para o que era antes. |
CP0012 | A palavra-chave virtual foi removida de um membro que antes era virtual. |
Adicione a palavra-chave virtual de volta ao membro. |
CP0013 | A palavra-chave virtual foi adicionada a um membro que antes não era virtual. |
Remova a palavra-chave virtual do membro. |
CP0014 | Um atributo foi removido de um membro em que estava antes. | Adicione o atributo ao membro novamente. |
CP0015 | Os argumentos passados para um atributo foram alterados de um lado para o outro. | Altere os argumentos para o modo em que estavam antes no atributo. |
CP0016 | Um atributo foi adicionado a um membro que antes não o tinha. | Remova o atributo do membro. |
CP0017 | O nome do parâmetro de um método foi alterado de um lado para o outro. | Altere o nome do parâmetro de volta para o que era antes. |
CP0018 | A palavra-chave sealed foi adicionada a um membro da interface que anteriormente não estava selado. |
Remova a palavra-chave sealed do membro da interface. |
CP0019 | A visibilidade de um membro foi reduzida de um lado para o outro. | Altere a visibilidade do membro de volta para o que era anteriormente. |
CP0020 | A visibilidade de um membro foi expandida de um lado para o outro. | Altere a visibilidade do membro de volta para o que era anteriormente. |
CP1001 | Não foi possível encontrar um assembly correspondente nos diretórios de pesquisa. (Não aplicável à validação de pacote, somente ao usar a API Compat diretamente.) | Forneça o diretório de pesquisa ao carregar assemblies correspondentes usando AssemblySymbolLoader . |
CP1002 | Não foi encontrado um assembly de referência ao carregar os assemblies para comparar nos diretórios resolvidos para a estrutura de destino atual. | Inclua o caminho do diretório em que esse assembly pode ser encontrado usando o seguinte item do MSBuild: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" /> . |
CP1003 | Não havia nenhum diretório de pesquisa para o moniker da estrutura de destino para o qual a validação do pacote está executando a API Compat. | Forneça o diretório de pesquisa para encontrar referências a essa estrutura de destino usando o seguinte item MSBuild: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" /> . |
Como suprimir
Você pode suprimir IDs de diagnóstico individuais de qualquer uma das seguintes maneiras:
- Por meio de um arquivo de supressão.
- Por meio do
NoWarn
sinalizador do compilador.
Arquivo de supressão
Para suprimir erros de compatibilidade para alterações intencionais, adicione um arquivo CompatibilitySuppressions.xml ao seu projeto. A validação do pacote e a validação do assembly usam o mesmo formato de arquivo de supressão.
Você pode gerar esse arquivo automaticamente de duas maneiras:
- Passando
/p:GenerateCompatibilitySuppressionFile=true
se você estiver empacotando o projeto da linha de comando. - Adicionando a seguinte propriedade ao arquivo de projeto:
<GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>
.
O arquivo de supressão tem esta aparência.
<?xml version="1.0" encoding="utf-8"?>
<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:A.B.DoStringManipulation(System.String)</Target>
<Left>lib/netstandard2.0/A.dll</Left>
<Right>lib/net6.0/A.dll</Right>
<IsBaselineSuppression>false</IsBaselineSuppression>
</Suppression>
</Suppressions>
DiagnosticId
especifica a ID do erro a ser suprimido.Target
especifica em que ponto no código suprimir as IDs de diagnóstico.Left
especifica o operando à esquerda de uma comparação APICompat.Right
especifica o operando direito de uma comparação APICompat.IsBaselineSuppression
especifica se a supressão deve ser aplicada a uma validação de linha de base (true
) ou não (false
).
Opção do compilador NoWarn
Também é possível suprimir as IDs de diagnóstico individuais por meio do sinalizador do compilador NoWarn
, por pacote ou globalmente.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<!-- The following NoWarn suppresses PKV001 project-wide -->
<NoWarn>$(NoWarn);PKV001</NoWarn>
</PropertyGroup>
</Project>