包/程序集验证错误代码
本文仅供参考,其中列出了由包验证和程序集验证生成的所有错误代码。
错误代码列表
诊断 ID | 说明 | 建议的操作 |
---|---|---|
PKV001 | 缺少兼容框架的编译时资产。 | 将适当的目标框架添加到项目中。 |
PKV002 | 缺少兼容框架和运行时的运行时资产。 | 将相应运行时的适当资产添加到包中。 |
PKV003 | 缺少兼容框架的运行时独立资产。 | 将适当的运行时独立目标框架添加到项目中。 |
PKV004 | 缺少编译时资产的兼容运行时资产。 | 将适当的运行时资产添加到包中。 |
PKV005 | 缺少编译时资产的兼容运行时资产和受支持的运行时标识符。 | 将适当的运行时资产添加到包中。 |
PKV006 | 最新版本中删除了目标框架。 | 将适当的目标框架添加到项目中。 |
PKV007 | 最新版本中删除了目标框架和运行时标识符对。 | 将适当的目标框架和 RID 添加到项目中。 |
CP0001 | 所比较的程序集中缺少该程序集外部可见的所需类型、枚举、记录或结构。 | 将缺少的类型添加到缺少该类型的程序集中。 |
CP0002 | 所比较的程序集中缺少在该程序集外部可见的所需成员。 | 将缺少的成员添加到缺少该成员的程序集中。 |
CP0003 | 程序集标识的某些部分(名称、公钥令牌、区域性、可重定目标属性或版本)对于比较的双方都不匹配。 | 更新程序集标识,使比较的双方匹配。 |
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 关键字。 |
CP0019 | 成员可见性从一侧到另一侧逐渐降低。 | 将成员的可见性更改回以前的值。 |
CP0020 | 成员可见性从一侧到另一侧逐渐提高。 | 将成员的可见性更改回以前的值。 |
CP1001 | 在搜索目录中找不到匹配的程序集。 (仅当直接使用 API 兼容性时适用,不适用于包验证。) | 当使用 AssemblySymbolLoader 加载匹配程序集时,提供搜索目录。 |
CP1002 | 在当前目标框架的解析目录中加载要比较的程序集时,找不到引用程序集。 | 使用以下 MSBuild 项添加可在其中找到该程序集的目录路径:<PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" /> 。 |
CP1003 | 没有为包验证正在为其运行 API 兼容性的目标框架名字对象提供任何搜索目录。 | 使用以下 MSBuild 项提供搜索目录,以查找该目标框架的引用:<PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" /> 。 |
如何禁止显示
可以通过以下任一方式禁止显示单个诊断 ID:
- 通过禁止显示文件。
- 通过
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
指定要抑制的错误的 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>