套件/組件驗證錯誤碼
此參考文章會列出套件驗證和組件驗證所產生的所有錯誤碼。
錯誤碼清單
診斷識別碼 | 描述 | 建議的動作 |
---|---|---|
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>" /> 。 |
如何隱藏
您可以使用下列任一種方式來隱藏個別診斷識別碼:
- 透過隱藏檔案。
- 透過
NoWarn
編譯器旗標。
隱藏檔案
若要隱藏預期變更的相容性錯誤,請將 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>