パッケージ/アセンブリ検証エラー コード

このリファレンス記事では、パッケージの検証とアセンブリの検証によって生成されるすべてのエラー コードのリストを示します。

エラー コードの一覧

診断 ID 説明 推奨される操作
PKV001 互換性のあるフレームワークのコンパイル時アセットが見つかりません。 適切なターゲット フレームワークをプロジェクトに追加します。
PKV002 互換性のあるフレームワークおよびランタイムの実行時アセットが見つかりません。 対応するランタイムに適したアセットをパッケージに追加します。
PKV003 互換性のあるフレームワークの実行時独立アセットが見つかりません。 適切な実行時独立ターゲット フレームワークをプロジェクトに追加します。
PKV004 コンパイル時アセットの互換性のある実行時アセットが見つかりません。 適切な実行時アセットをパッケージに追加します。
PKV005 コンパイル時アセットの互換性のある実行時アセットと、サポートされるランタイム識別子が見つかりません。 適切な実行時アセットをパッケージに追加します。
PKV006 ターゲット フレームワークが最新バージョンで削除されています。 適切なターゲット フレームワークをプロジェクトに追加します。
PKV007 ターゲット フレームワークとランタイム識別子のペアが最新バージョンで削除されています。 適切なターゲット フレームワークと RID をプロジェクトに追加します。
CP0001 アセンブリの外部で参照できる型、列挙型、レコード、または構造体が、存在する必要があるときに、比較対象のアセンブリに存在しません。 欠落している型をアセンブリに (欠落している場所に)追加します。
CP0002 アセンブリの外部で参照できるメンバーが、存在する必要があるときに、比較対象のアセンブリに存在しません。 欠落しているメンバーをアセンブリに (欠落している場所に)追加します。
CP0003 アセンブリ ID の一部 (名前、公開キー トークン、カルチャ、再ターゲット可能な属性、またはバージョン) が、比較の両側で一致しません。 両側が一致するようにアセンブリ ID を更新します。
CP0004 アセンブリ マッピングの作成時に、一致するアセンブリが比較の一方の側に見つかりませんでした。 欠落しているアセンブリをパッケージに追加してください。
CP0005 abstract メンバーが、比較の右側のアンシールド型に追加されました。 このメンバーを削除するか、abstract として注釈を付けないでください。
CP0006 メンバーがインターフェイスに追加されましたが、既定の実装がありません。 ターゲット フレームワークと言語バージョンで既定の実装がサポートされている場合は、これを追加するか、このメンバーをインターフェイスから削除してください。
CP0007 クラス階層の基本型が、比較のいずれかの側から削除されました。 基本型を再び追加します (意図されている場合、新しい基本型を階層に導入できます)。
CP0008 基底インターフェイスが、比較のいずれかの側でインターフェイス階層から削除されました。 階層にインターフェイスを追加し直します。
CP0009 一方の側でアンシールドだった型が、比較のもう一方の側で sealed として注釈が付けられました。 sealed 注釈を型から削除します。
CP0010 列挙型の基になる型が一方の側からもう一方の側に変更されました。 基になる型を以前の型に戻します。
CP0011 列挙型のメンバーの値が一方の側からもう一方の側に変更されました。 メンバーの値を以前の値に戻します。
CP0012 virtual キーワードが、以前は仮想だったメンバーから削除されました。 メンバーに virtual キーワードを追加し直します。
CP0013 virtual キーワードが、以前は仮想ではなかったメンバーに追加されました。 メンバーから virtual キーワードを削除します。
CP0014 属性が、前にそれを保持していたメンバーから削除されました。 属性をメンバーに追加して戻します。
CP0015 属性に渡された引数が、一方から他方に変更されました。 引数を変更して以前の属性に戻します。
CP0016 属性が、前にそれを保持していなかったメンバーに追加されました。 属性をメンバーから削除します。
CP0017 メソッドのパラメーターの名前が、一方から他方に変更されました。 パラメーターの名前を以前の名前に戻します。
CP0018 sealed キーワードが、以前は sealed ではなかったインターフェイス メンバーに追加されました。 インターフェイス メンバーから sealed キーワードを削除します。
CP0019 メンバーの表示範囲が一方から他方に縮小されました。 メンバーの表示範囲を以前の内容に戻します。
CP0020 メンバーの表示範囲が一方から他方に拡大されました。 メンバーの表示範囲を以前の内容に戻します。
CP1001 一致するアセンブリが検索ディレクトリに見つかりませんでした。 (パッケージの検証には適用されず、API の互換性を直接使用する場合のみ。) AssemblySymbolLoader を使用して一致するアセンブリを読み込むときに、検索ディレクトリを指定します。
CP1002 現在のターゲット フレームワークの解決されたディレクトリに比較するアセンブリを読み込むときに、参照アセンブリが見つかりませんでした。 次の MSBuild 項目を使用して、そのアセンブリが見つかるディレクトリ パスを含めます: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />
CP1003 パッケージの検証で API の互換性が実行されているターゲット フレームワーク モニカーに対して検索ディレクトリが指定されませんでした。 次の MSBuild 項目を使用して、ターゲット フレームワークの参照を見つける検索ディレクトリを指定します: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />

抑制する方法

個々の診断 ID は、次のいずれかの方法で抑制できます。

抑制ファイル

意図的な変更についての互換性エラーを抑制するには、プロジェクトに CompatibilitySuppressions.xml ファイルを追加します。 パッケージの検証とアセンブリの検証では、同じ抑制ファイル形式が使用されます。

このファイルは、次の 2 つの方法のいずれかで自動的に生成できます。

  • コマンド ラインからプロジェクトをパッキングする場合は、/p:GenerateCompatibilitySuppressionFile=true を渡します。
  • プロジェクト ファイルに次のプロパティを追加します: <GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>

抑制ファイルは次のようになります。

<?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 には、抑制するエラーの ID を指定します。
  • Target には診断 ID を抑制するコード内の場所を指定します。
  • Left には、APICompat 比較の左オペランドを指定します。
  • Right には、APICompat 比較の右オペランドを指定します。
  • IsBaselineSuppression により、ベースライン検証に抑制を適用する (true) か適用しない (false) かを指定します。

NoWarn コンパイラ オプション

NoWarn コンパイラ フラグを使用して個々の診断 ID をパッケージごとに、またはグローバルに、抑制することもできます。

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