Share via


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:

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>