Comparteix a través de


Códigos de error de validación de paquetes o ensamblados

En este artículo de referencia se enumeran todos los códigos de error generados por la validación de paquetes y la validación de ensamblados.

Lista de códigos de error

Id. de diagnóstico Descripción Acción recomendada
PKV001 Falta un recurso en tiempo de compilación para un marco compatible. Agregue la plataforma de destino adecuada al proyecto.
PKV002 Falta un recurso en tiempo de ejecución para un marco y un entorno de ejecución compatibles. Agregue el recurso adecuado para el entorno de ejecución correspondiente al paquete.
PKV003 Falta un recurso independiente en tiempo de ejecución para un marco compatible. Agregue la plataforma de destino independiente en tiempo de ejecución adecuada al proyecto.
PKV004 Falta un recurso en tiempo de ejecución compatible con un recurso en tiempo de compilación. Agregue el recurso en tiempo de ejecución adecuado al paquete.
PKV005 Falta un recurso en tiempo de ejecución compatible con un recurso en tiempo de compilación y un identificador de tiempo de ejecución compatible. Agregue el recurso en tiempo de ejecución adecuado al paquete.
PKV006 La plataforma de destino se anula en la versión más reciente. Agregue la plataforma de destino adecuada al proyecto.
PKV007 El marco de destino y el par de identificadores en tiempo de ejecución se anulan en la versión más reciente. Agregue la plataforma de destino y el RID adecuados al proyecto.
CP0001 En el ensamblado comparado, cuando es necesario que esté presente, falta un tipo, enumeración, registro o estructura visible fuera del ensamblado. Agregue el tipo que falta al ensamblado donde no se encuentre.
CP0002 En el ensamblado comparado, cuando es necesario que esté presente, falta un miembro que sea visible fuera del ensamblado. Agregue el miembro que falta al ensamblado donde no se encuentre.
CP0003 Parte de la identidad del ensamblado (nombre, token de clave pública, referencia cultural, atributo redestinable o versión) no coincide en ambos lados de la comparación. Actualice la identidad del ensamblado para que ambos lados coincidan.
CP0004 No se encontró un ensamblado coincidente en un lado de la comparación al crear la asignación del ensamblado. Asegúrese de que el ensamblado que falta se agrega al paquete.
CP0005 Se agregó un miembro abstract al lado derecho de la comparación a un tipo no sellado. Elimine el miembro o no lo anote como abstract.
CP0006 Se agregó un miembro a una interfaz sin una implementación predeterminada. Si la versión del lenguaje y la plataforma de destino admiten implementaciones predeterminadas, agregue una o simplemente quite el miembro de la interfaz.
CP0007 Se quitó un tipo base en la jerarquía de clases de uno de los lados comparados. Vuelva a agregar el tipo base. (Se puede introducir un nuevo tipo base en la jerarquía si está previsto).
CP0008 Se quitó una interfaz base de la jerarquía de interfaz de uno de los lados comparados. Vuelva a agregar la interfaz a la jerarquía.
CP0009 Un tipo no sellado en un lado se anotó como sealed en el otro lado comparado. Elimine la anotación sealed del tipo.
CP0010 El tipo subyacente de una enumeración cambió de un lado a otro. Vuelva a cambiar el tipo subyacente al que era anteriormente.
CP0011 El valor de un miembro de una enumeración cambió de un lado a otro. Vuelva a cambiar el valor del miembro al que era anteriormente.
CP0012 La palabra clave virtual se eliminó de un miembro que anteriormente era virtual. Vuelva a agregar la palabra clave virtual al miembro.
CP0013 La palabra clave virtual se agregó a un miembro que anteriormente no era virtual. Quite la palabra clave virtual del miembro.
CP0014 Se quitó un atributo de un miembro que lo tenía anteriormente. Vuelva a agregar el atributo al miembro.
CP0015 Los argumentos pasados a un atributo cambiaron de un lado a otro. Cambie los argumentos al atributo de nuevo a como estaban anteriormente.
CP0016 Se agregó un atributo a un miembro que anteriormente no lo tenía. Quite el atributo del miembro.
CP0017 Nombre de parámetro de un método que se cambia de un extremo a otro. Vuelva a cambiar el nombre del parámetro al que era anteriormente.
CP0018 La palabra clave sealed se agregó a un miembro de interfaz que anteriormente no estaba sellado. Quite la palabra clave sealed del miembro de interfaz.
CP0019 La visibilidad de un miembro se redujo de un extremo al otro. Cambie la visibilidad del miembro a lo que era anteriormente.
CP0020 La visibilidad de un miembro se expandió de un extremo al otro. Cambie la visibilidad del miembro a lo que era anteriormente.
CP1001 No se encontró un ensamblado coincidente en los directorios de búsqueda. (No es aplicable a la validación de paquetes, solo cuando se usa la API Compat directamente). Proporcione el directorio de búsqueda al cargar ensamblados coincidentes mediante AssemblySymbolLoader.
CP1002 No se encontró un ensamblado de referencia al cargar los ensamblados para compararlos en los directorios resueltos de la plataforma de destino actual. Incluya la ruta de acceso del directorio en la que se puede encontrar ese ensamblado mediante el elemento MSBuild siguiente: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.
CP1003 No se proporcionó ningún directorio de búsqueda para el moniker de la plataforma de destino para el que API Compat ejecuta la validación de paquetes. Proporcione el directorio de búsqueda a fin de buscar referencias para esa plataforma de destino mediante el elemento MSBuild siguiente: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.

Cómo eliminar elementos

Puede eliminar identificadores de diagnóstico individuales de cualquiera de las maneras siguientes:

Archivo de supresión

Para eliminar los errores de compatibilidad de los cambios intencionados, agregue un archivo CompatibilitySuppressions.xml al proyecto. La validación de paquetes y la validación de ensamblados usan el mismo formato de archivo de supresión.

Puede generar este archivo automáticamente de una de estas dos maneras:

  • Al pasar /p:GenerateCompatibilitySuppressionFile=true si va a empaquetar el proyecto desde la línea de comandos.
  • Al agregar la siguiente propiedad al archivo del proyecto: <GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>.

El archivo de eliminación tiene este aspecto.

<?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 especifica el id. del error que se debe eliminar.
  • Target especifica dónde eliminar en el código los id. de diagnóstico.
  • Left especifica el operando izquierdo de una comparación APICompat.
  • Right especifica el operando derecho de una comparación APICompat.
  • IsBaselineSuppression especifica si se debe aplicar la supresión a una validación de línea de base (true) o no (false).

Opción del compilador NoWarn

También puede suprimir identificadores de diagnóstico individuales mediante la marca del compilador NoWarn, ya sea por paquete o globalmente.

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