Partilhar via


Códigos de erro de validação de pacote/montagem

Este artigo de referência lista todos os códigos de erro gerados pela validação de pacote e validação de assembly.

Lista de códigos de erro

ID de diagnóstico Description Ação recomendada
PKV001 Um ativo de tempo de compilação para uma estrutura compatível está faltando. Adicione a estrutura de destino apropriada ao projeto.
PKV002 Um ativo de tempo de execução para uma estrutura compatível e tempo de execução está faltando. Adicione o ativo apropriado para o tempo de execução correspondente ao pacote.
PKV003 Um ativo independente de tempo de execução para uma estrutura compatível está faltando. 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 tempo de execução suportado está faltando. 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 tempo de execução são descartados na versão mais recente. Adicione a estrutura de destino apropriada e o RID ao projeto.
CP0001 Um tipo, enum, registro ou estrutura visível fora do assembly está faltando no assembly comparado quando necessário para estar presente. Adicione o tipo ausente ao assembly onde ele está faltando.
CP0002 Um membro visível fora da assembleia está ausente na assembleia comparada quando é necessário estar presente. Adicione o membro ausente ao assembly onde ele está faltando.
CP0003 Alguma 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 coincidam.
CP0004 Um assembly correspondente não foi encontrado em um lado da comparação ao criar o mapeamento de assembly. Certifique-se de que o assembly ausente seja adicionado ao pacote.
CP0005 Um abstract membro foi adicionado ao lado direito da comparação para um tipo não lacrado. 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 do idioma suportarem implementações padrão, adicione uma ou simplesmente remova o membro da interface.
CP0007 Um tipo de 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 for essa a intenção.)
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 foi deslacrado de um lado foi anotado como sealed no outro lado comparado. Remova a sealed anotação do tipo.
CP0010 O tipo subjacente de um enum mudou de um lado para o outro. Altere o tipo subjacente de volta ao que era anteriormente.
CP0011 O valor de um membro em um enum mudou de um lado para o outro. Altere o valor do membro de volta para o que era anteriormente.
CP0012 A virtual palavra-chave foi removida de um membro que anteriormente era virtual. Adicione a virtual palavra-chave de volta ao membro.
CP0013 A virtual palavra-chave foi adicionada a um membro que anteriormente não era virtual. Remova a virtual palavra-chave do membro.
CP0014 Um atributo foi removido de um membro que o tinha anteriormente. Adicione o atributo de volta ao membro.
CP0015 Os argumentos passados para um atributo mudaram de um lado para o outro. Altere os argumentos para o atributo de volta ao que eram anteriormente.
CP0016 Um atributo foi adicionado a um membro que anteriormente não o tinha. Remova o atributo do membro.
CP0017 O nome do parâmetro de um método mudou de um lado para o outro. Altere o nome do parâmetro de volta para o que era anteriormente.
CP0018 A sealed palavra-chave foi adicionada a um membro da interface que anteriormente não estava lacrado. Remova a sealed palavra-chave 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 ampliada 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 para validação de pacotes, somente ao usar API Compat diretamente.) Forneça o diretório de pesquisa ao carregar assemblies correspondentes usando AssemblySymbolLoadero .
CP1002 Um assembly de referência não foi encontrado ao carregar os assemblies para comparar nos diretórios resolvidos para a estrutura de destino atual. Inclua o caminho do diretório onde 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 fornecido para o moniker da estrutura de destino para o qual a validação do pacote está executando o API Compat. Forneça o diretório de pesquisa para localizar referências para essa estrutura de destino usando o seguinte item do MSBuild: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.

Como suprimir

Você pode suprimir IDs de diagnóstico individuais de uma das seguintes maneiras:

  • Através de um ficheiro de supressão.
  • Através do sinalizador do NoWarn 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 de pacote e a validação de 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 a partir da linha de comando.
  • Adicionando a seguinte propriedade ao seu 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 onde no código para suprimir as IDs de diagnóstico.
  • Left especifica o operando esquerdo de uma comparação APICompat.
  • Right especifica o operando correto 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

Você também pode suprimir IDs de diagnóstico individuais por meio do sinalizador do NoWarn compilador, por pacote ou globalmente.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <!-- The following NoWarn suppresses PKV001 project-wide -->
    <NoWarn>$(NoWarn);PKV001</NoWarn>
  </PropertyGroup>
</Project>