Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

3 года назад
Открыть в
День 1483. #ЗаметкиНаПолях Обнаружение Критических Изменений Между Версиями NuGet-пакета NuGet-пакеты можно не только добавлять в свои проекты, но и создавать самим. Не обязательно при этом размещать их публично. Они могут использоваться, например, как общие библиотеки при обмене кодом между командами. Начиная с .NET 6, пакет SDK для .NET предоставляет новую функцию под названием Package Validation (Проверка пакетов), которая позволяет авторам NuGet-пакетов проверять несколько аспектов своих пакетов. Эта функция не включена по умолчанию, поэтому вы должны включить её, добавив свойство EnablePackageValidation в файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
  <TargetFramework>
    net6.0
  </TargetFramework>
  <PackageVersion>
    2.0.0
  </PackageVersion>
  <EnablePackageValidation>
    true
  </EnablePackageValidation>
  <PackageValidationBaselineVersion>
    1.0.0
   </PackageValidationBaselineVersion>
   <PackageValidationBaselinePath>
    path_to_nupkg\MyLibrary.1.0.0.nupkg
   </PackageValidationBaselinePath>
 </PropertyGroup>
</Project>

PackageValidationBaselineVersion указывает версию пакета, которая будет использоваться в качестве базовой для проверки. Эта версия должна быть доступна в веб-канале NuGet. Если вы хотите использовать другое расположение или если базовый пакет недоступен в NuGet, вы можете вместо этого использовать свойство PackageValidationBaselinePath. При сборке пакета с помощью dotnet pack SDK .NET сообщит об ошибках после сборки пакета. Например, если вы добавите к классу модификатор sealed, .SDK сообщит об ошибке: CP0009: Type 'MyLibrary.Class1' has the sealed modifier on lib/net7.0/MyLibrary.dll but not on [Baseline] lib/net7.0/MyLibrary.dll. (Тип 'MyLibrary.Class1' имеет модификатор sealed в lib/net7.0/MyLibrary.dll, но не в базовой версии lib/net7.0/MyLibrary.dll). Вы можете сгенерировать файл для подавления ошибок о критических изменениях, которые вы ожидаете ввести в новой версии:
<PropertyGroup>
 <GenerateCompatibilitySuppressionFile>
  true
 </GenerateCompatibilitySuppressionFile>
 <CompatibilitySuppressionFilePath>
  ApiCompatSuppressions.xml
 </CompatibilitySuppressionFilePath>
</PropertyGroup>

Источник: https://www.meziantou.net/detecting-breaking-changes-between-two-versions-of-a-nuget-package-at-packaging.htm