TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.76K subscribers
Post #1818 1.56K
День 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
  • 👍 3
More from @netdeveloperdiary
  1. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 1. Почему существу…
  2. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  3. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  4. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  5. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  6. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →