Condividi tramite


Codici di errore di convalida pacchetto/assembly

Questo articolo di riferimento elenca tutti i codici errore generati dalla convalida del pacchetto e dalla convalida dell'assembly.

Elenco dei codici di errore

ID di diagnostica Descrizione Azione consigliata
PKV001 Manca un asset in fase di compilazione per un framework compatibile. Aggiungere il framework di destinazione appropriato al progetto.
PKV002 Manca un asset di runtime per un framework compatibile e un runtime. Aggiungere l'asset appropriato per il runtime corrispondente al pacchetto.
PKV003 Manca un asset indipendente in fase di esecuzione per un framework compatibile. Aggiungere il framework di destinazione indipendente di runtime appropriato al progetto.
PKV004 Manca un asset di runtime compatibile per un asset in fase di compilazione. Aggiungere l'asset di runtime appropriato al pacchetto.
PKV005 Un asset di runtime compatibile per un asset in fase di compilazione e un identificatore di runtime supportato è mancante. Aggiungere l'asset di runtime appropriato al pacchetto.
PKV006 Il framework di destinazione è stato eliminato nella versione più recente. Aggiungere il framework di destinazione appropriato al progetto.
PKV007 La coppia di identificatori di runtime e framework di destinazione è stata eliminata nella versione più recente. Aggiungere il framework di destinazione e il RID appropriati al progetto.
CP0001 Un tipo, un'enumerazione, un record o uno struct visibili all'esterno dell'assembly non sono presenti nell'assembly confrontato quando necessario. Aggiungere il tipo mancante all'assembly in cui manca.
CP0002 Un membro visibile all'esterno dell'assembly non è presente nell'assembly confrontato quando necessario. Aggiungere il membro mancante all'assembly in cui manca.
CP0003 Alcune parti dell'identità dell'assembly (nome, token di chiave pubblica, impostazioni cultura, attributo retargetable o versione) non corrispondono a entrambi i lati del confronto. Aggiornare l'identità dell'assembly in modo che entrambi i lati corrispondano.
CP0004 Impossibile trovare un assembly corrispondente su un lato del confronto durante la creazione del mapping dell'assembly. Assicurarsi che l'assembly mancante venga aggiunto al pacchetto.
CP0005 Un membro abstract è stato aggiunto al lato destro del confronto con un tipo non bloccato. Rimuovere il membro o non annotarlo come abstract.
CP0006 Un membro è stato aggiunto a un'interfaccia senza un'implementazione predefinita. Se il framework di destinazione e la versione del linguaggio supportano le implementazioni predefinite, aggiungerne una o semplicemente rimuovere il membro dall'interfaccia.
CP0007 Un tipo di base nella gerarchia di classi è stato rimosso da uno dei lati confrontati. Aggiungere di nuovo il tipo di base. È possibile introdurre un nuovo tipo di base nella gerarchia, se previsto.
CP0008 Un'interfaccia di base è stata rimossa dalla gerarchia dell'interfaccia da uno dei lati confrontati. Aggiungere nuovamente l'interfaccia alla gerarchia.
CP0009 Un tipo non bloccato su un lato è stato annotato come sealed nell'altro lato confrontato. Rimuovere l'annotazione sealed dal tipo.
CP0010 Il tipo sottostante di un'enumerazione è cambiato da un lato all'altro. Modificare di nuovo il tipo sottostante impostandolo su quello precedente.
CP0011 Il valore di un membro in un'enumerazione è cambiato da un lato all'altro. Modificare di nuovo il valore del membro impostandolo su quello precedente.
CP0012 La parola chiave virtual è stata rimossa da un membro che in precedenza era virtuale. Aggiungere di nuovo la parola chiave virtual al membro.
CP0013 La parola chiave virtual è stata aggiunta a un membro che in precedenza non era virtuale. Rimuovere la parola chiave virtual dal membro.
CP0014 Un attributo è stato rimosso da un membro che in precedenza lo aveva. Aggiungere di nuovo l'attributo al membro.
CP0015 Gli argomenti passati a un attributo sono stati modificati da un lato all'altro. Modificare gli argomenti con l'attributo in base a quello precedente.
CP0016 Un attributo è stato aggiunto a un membro che in precedenza non lo aveva. Rimuovere l'attributo dal membro.
CP0017 Il nome del parametro di un metodo è cambiato da un lato all'altro. Modificare il nome del parametro in base a quello precedente.
CP0018 La parola chiave sealed è stata aggiunta a un membro di interfaccia non bloccato in precedenza. Rimuovere la parola chiave sealed dal membro dell'interfaccia.
CP0019 La visibilità di un membro è stata ridotta da un lato all'altro. Modificare la visibilità del membro in base al suo valore precedente.
CP0020 La visibilità di un membro è stata ampliata da un lato all'altro. Modificare la visibilità del membro in base al suo valore precedente.
CP1001 Impossibile trovare un assembly corrispondente nelle directory di ricerca. Non applicabile per la convalida del pacchetto, solo quando si usa direttamente API Compat. Specificare la directory di ricerca quando si caricano assembly corrispondenti usando AssemblySymbolLoader.
CP1002 Impossibile trovare un assembly di riferimento durante il caricamento degli assembly da confrontare nelle directory risolte per il framework di destinazione corrente. Includere il percorso della directory in cui è possibile trovare l'assembly usando l'elemento MSBuild seguente: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.
CP1003 Non è stata fornita alcuna directory di ricerca per il moniker del framework di destinazione per cui la convalida del pacchetto esegue API Compat. Specificare la directory di ricerca per trovare i riferimenti per il framework di destinazione usando l'elemento MSBuild seguente: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.

Come eliminare

È possibile eliminare i singoli ID di diagnostica in uno dei modi seguenti:

File di eliminazione

Per eliminare gli errori di compatibilità per le modifiche intenzionali, aggiungere un file CompatibilitySuppressions.xml al progetto. La convalida dei pacchetti e la convalida dell'assembly usano lo stesso formato di file di eliminazione.

È possibile generare automaticamente questo file in uno dei due modi seguenti:

  • Passando /p:GenerateCompatibilitySuppressionFile=true se si inserisce il progetto in un pacchetto dalla riga di comando.
  • Aggiungendo la proprietà seguente al file di progetto: <GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>.

Il file di eliminazione è simile al seguente.

<?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 specifica l'ID dell'errore da eliminare.
  • Target specifica dove eliminare gli ID di diagnostica nel codice.
  • Left specifica l'operando sinistro di un confronto APICompat.
  • Right specifica l'operando destro di un confronto APICompat.
  • IsBaselineSuppression specifica se applicare l'eliminazione a una convalida di base (true) o meno (false).

Opzione del compilatore NoWarn

È anche possibile eliminare singoli ID di diagnostica tramite il flag del compilatore NoWarn, per ogni pacchetto o a livello globale.

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