I have a .NET project that creates a nuget package and I wanted to add PackageValidation as described here: https://learn.microsoft.com/en-us/dotnet/fundamentals/package-validation/overview
I have these lines in my sdk-style project file:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>symbols.nupkg</SymbolPackageFormat>
<EnablePackageValidation>true</EnablePackageValidation>
<PackageValidationBaselineVersion>8.0.1</PackageValidationBaselineVersion>
But I don't get any output, even if I add breaking changes to my assembly.
Only when I change the BaseLineVersion to a number that does not exist, I see some related output:
SsiProxyNuGet.csproj : error NU1102: Unable to find package SsiProxy with version (= 8.0.0)
SsiProxyNuGet.csproj : error NU1102: - Found 4 version(s) in ASM-NuGet [ Nearest version: 8.0.1 ]
SsiProxyNuGet.csproj : error NU1102: - Found 0 version(s) in Microsoft Visual Studio Offline Packages
SsiProxyNuGet.csproj : error NU1102: - Found 0 version(s) in nuget.org
Does anybody have the .net package validation working?
Update: I created a new .NET 6 project to test, published a package with version 1.0.0, increased my version to 1.0.1 and made a breaking change to the library. Then I get this message when building:
error CP0002: Member 'PackageValidationTest.Calc.Sum(int, int)' exists on [Baseline] lib/net6.0/PackageValidationTest.dll but not on lib/net6.0/PackageValidationTest.dll
Why does this not work with my existing project???
Update2: Did some more testing and validation works with new projects in .Net6, .net standard 2.0 and .net 4.8.
For my new .net 4.8 project I see this in the output after adding a breaking change:
Target RunPackageValidation: Using "Microsoft.DotNet.Compatibility.ValidatePackage" task from assembly "C:\Program Files\dotnet\sdk\6.0.201\Sdks\Microsoft.NET.Sdk\targets..\tools\net472\Microsoft.DotNet.Compatibility.dll". Task "Microsoft.DotNet.Compatibility.ValidatePackage" Breaking changes to the API surface between 'lib/net48/PackageValidationTestNetFramework.dll' (left) and 'lib/net48/PackageValidationTestNetFramework.dll' (right) for versions 1.0.0 and 1.0.1 respectively: C:\Program Files\dotnet\sdk\6.0.201\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Compatibility.Common.targets(32,5): error CP0002: Member 'PackageValidationTestNetFramework.Calc.Sum(int, int)' exists on [Baseline] lib/net48/PackageValidationTestNetFramework.dll but not on lib/net48/PackageValidationTestNetFramework.dll Done executing task "Microsoft.DotNet.Compatibility.ValidatePackage" -- FAILED.
For my existing project it still does not recognize the breaking change. At least I see that the msbuild target gets called:
Target RunPackageValidation: Using "Microsoft.DotNet.Compatibility.ValidatePackage" task from assembly "C:\Program Files\dotnet\sdk\6.0.201\Sdks\Microsoft.NET.Sdk\targets..\tools\net472\Microsoft.DotNet.Compatibility.dll". Task "Microsoft.DotNet.Compatibility.ValidatePackage" Done executing task "Microsoft.DotNet.Compatibility.ValidatePackage".
PackageValidation did not show any output in my case, because the PackageID is different than the AssemblyName.
This is already fixed by MS. See https://github.com/dotnet/sdk/issues/23646
I tested with a prerelease-package and this works fine :)