Бөлісу құралы:


Коды ошибок проверки пакета и сборки

В этой справочной статье перечислены все коды ошибок, созданные проверкой пакета и проверкой сборки.

Список кодов ошибок

ИД диагностики Description Рекомендуемое действие
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 Compat напрямую.) Укажите каталог поиска при загрузке соответствующих сборок с помощью AssemblySymbolLoader.
CP1002 Не найдена ссылочная сборка при загрузке сборок для сравнения в разрешенных каталогах для текущей целевой платформы. Укажите путь к каталогу, в котором можно найти эту сборку, используя следующий элемент MSBuild: <PackageValidationReferencePath Include="<path>" TargetFramework="<tfm>" />.
CP1003 Не указан каталог поиска для моникера целевой платформы, для которого проверка пакетов выполняет API Compat. Укажите каталог поиска, чтобы найти ссылки на эту целевую платформу, используя следующий элемент MSBuild: <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>