다음을 통해 공유


패키지/어셈블리 유효성 검사 오류 코드

이 참조 문서에는 패키지 유효성 검사 및 어셈블리 유효성 검사에서 생성된 모든 오류 코드가 나열되어 있습니다.

오류 코드 목록

진단 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 키워드를 제거합니다.
CP0019 멤버의 가시성이 한 쪽에서 다른 쪽으로 감소했습니다. 멤버의 가시성을 이전으로 다시 변경합니다.
CP0020 멤버의 가시성이 한 쪽에서 다른 쪽으로 확장되었습니다. 멤버의 가시성을 이전으로 다시 변경합니다.
CP1001 검색 디렉터리에서 일치하는 어셈블리를 찾지 못했습니다. (API Compat를 직접 사용하는 경우에만 패키지 유효성 검사에 적용되지 않습니다.) AssemblySymbolLoader(을)를 사용하여 일치하는 어셈블리를 로드할 때 검색 디렉터리를 제공합니다.
CP1002 비교할 어셈블리를 로드할 때 현재 대상 프레임워크의 확인된 디렉터리에서 참조 어셈블리를 찾지 못했습니다. MSBuild 항목 <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />을 사용하여 이 어셈블리를 찾을 수 있는 디렉터리 경로를 포함합니다.
CP1003 패키지 유효성 검사가 API 호환성을 실행하는 대상 프레임워크 모니커에 대해 제공된 검색 디렉터리가 없습니다. MSBuild 항목 <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />을 사용하여 해당 대상 프레임워크의 참조를 찾을 검색 디렉터리를 제공합니다.

표시 안하는 방법

다음 방법 중 하나에서 개별 진단 ID를 표시하지 않을 수 있습니다.

표시 안 함 파일

의도적인 변경 내용에 대한 호환성 오류를 표시하지 않으려면 프로젝트에 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>