День 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