共用方式為


套件/組件驗證錯誤碼

此參考文章會列出套件驗證和組件驗證所產生的所有錯誤碼。

錯誤碼清單

診斷識別碼 描述 建議的動作
PKV001 遺漏相容架構的編譯時間資產。 將適當的目標 Framework 新增至專案。
PKV002 遺漏相容架構與執行階段的執行階段資產。 將對應執行階段的適當資產新增至套件。
PKV003 遺漏相容架構的執行階段獨立資產。 將適當的執行階段獨立目標 Framework 新增至專案。
PKV004 遺漏編譯時間資產的相容執行階段資產。 將適當的執行階段資產新增至套件。
PKV005 遺漏編譯時間資產的相容執行階段資產與支援的執行階段識別碼。 將適當的執行階段資產新增至套件。
PKV006 最新版本中已置放目標 Framework。 將適當的目標 Framework 新增至專案。
PKV007 最新版本中已置放目標 Framework 與執行階段識別碼組。 將適當的目標 Framework 與 RID 新增至專案。
CP0001 當在組件以外顯示的類型、列舉、記錄或結構需要存在時,在比較組件中遺漏了它們。 將遺漏的類型新增至遺漏的組件。
CP0002 當在組件以外顯示的成員需要存在時,比較組件中遺漏了。 將遺漏的成員新增至遺漏的組件。
CP0003 組件識別的某些部分 (名稱、公開金鑰權杖、文化特性 (Culture)、可重定目標屬性或版本) 在比較的兩端不相符。 更新組件識別,讓兩端相符。
CP0004 建立組件對應時,在比較的一端找不到相符組件。 請確定遺漏的組件已新增至套件。
CP0005 已將 abstract 成員新增至與非密封類型比較的右側。 移除成員,或不要將其標註為 abstract
CP0006 已將成員新增至沒有預設實作的介面。 若目標 Framework 與語言版本支援預設實作,請新增一個,或直接從介面中移除成員。
CP0007 類別階層的基底類型已從其中一個比較端中移除。 重新新增基底類型。 (若想要的話,可以在階層中引進新的基底類型。)
CP0008 基底介面已從其中一個比較端的介面階層中移除。 將介面重新新增至階層。
CP0009 一端的非密封類型已附註為另一個比較端的 sealed 從類型中移除 sealed 註解。
CP0010 列舉的基礎類型從一端變更為另一端。 將基礎類型變更回先前內容。
CP0011 列舉中成員的值從一端變更為另一端。 將成員的值變更回先前內容。
CP0012 virtual 關鍵字已從先前虛擬的成員中移除。 virtual 關鍵字重新新增至成員。
CP0013 已將 virtual 關鍵字新增至先前不是虛擬的成員。 請從成員中移除 virtual 關鍵字。
CP0014 屬性已從先前擁有該屬性的成員中移除。 將屬性重新新增至成員。
CP0015 傳遞至屬性的引數從一端變更為另一端。 將屬性的引數變更回先前引數。
CP0016 已將屬性新增至先前沒有該屬性的成員。 從成員中移除 屬性。
CP0017 方法的參數名稱從一端變更為另一端。 將參數的名稱變更回先前內容。
CP0018 已將 sealed 關鍵字新增至先前非密封的介面成員。 從介面成員中移除 sealed 關鍵字。
CP0019 成員的可見度從一端減少至另一端。 將成員的可見度變更回先前內容。
CP0020 成員的可見度從一端擴充至另一端。 將成員的可見度變更回先前內容。
CP1001 搜尋目錄中找不到相符的組件。 (不適用於套件驗證,只有在直接使用 API Compat 才適用。) 使用 AssemblySymbolLoader 載入相符組件時,請提供搜尋目錄。
CP1002 當載入組件以在目前目標 Framework 的已解析目錄中進行比較時,找不到參考組件。 包括可使用下列 MSBuild 項目找到該組件的目錄路徑:<PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />
CP1003 沒有針對目標 Framework Moniker 提供的搜尋目錄,套件驗證正在執行 API Compat。 提供搜尋目錄,以使用下列 MSBuild 項目尋找該目標 Framework 的參考:<PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />

如何隱藏

您可以使用下列任一種方式來隱藏個別診斷識別碼:

隱藏檔案

若要隱藏預期變更的相容性錯誤,請將 CompatibilitySuppressions.xml 檔案新增至您的專案。 套件驗證和組件驗證使用相同的隱藏檔案格式。

您可以透過下列兩種方式自動產生此檔案:

  • 如果您從命令列封裝專案,則傳遞 /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 指定要隱藏的錯誤識別碼
  • Target 會指定程式碼中要隱藏診斷識別碼的位置。
  • Left 會指定 APICompat 比較的左運算元。
  • Right 會指定 APICompat 比較的右運算元。
  • IsBaselineSuppression 指定是否將隱藏套用至基準驗證 (true) 或 (false)。

NoWarn 編譯器選項

您也可以透過每個套件或全域的 NoWarn 編譯器旗標來隱藏個別診斷標識碼。

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