Nullean.PublicApi.Diff
1.1.0
dotnet add package Nullean.PublicApi.Diff --version 1.1.0
NuGet\Install-Package Nullean.PublicApi.Diff -Version 1.1.0
<PackageReference Include="Nullean.PublicApi.Diff" Version="1.1.0" />
<PackageVersion Include="Nullean.PublicApi.Diff" Version="1.1.0" />
<PackageReference Include="Nullean.PublicApi.Diff" />
paket add Nullean.PublicApi.Diff --version 1.1.0
#r "nuget: Nullean.PublicApi.Diff, 1.1.0"
#:package Nullean.PublicApi.Diff@1.1.0
#addin nuget:?package=Nullean.PublicApi.Diff&version=1.1.0
#tool nuget:?package=Nullean.PublicApi.Diff&version=1.1.0
Nullean.PublicApi.Diff
Compares the public API of two versions of a .NET assembly: what was added, removed or changed, the version bump semantic versioning calls for, and which of the changes affect code that uses the assembly.
using Nullean.PublicApi.Diff;
var diff = ApiDiff.Compare("old/MyLib.dll", "new/MyLib.dll");
if (diff is null)
return; // the same API
diff.Visit((item, depth) =>
Console.WriteLine($"{new string(' ', depth * 2)}{item.DiffType} {item.HumanReadable} ({VersionChange.Classify(item)})"));
Who a change breaks
ApiComparison.Compare compares two models read with Nullean.PublicApi,
from assemblies or .api files, and says for each change who it breaks (callers, implementers or inheritors), whether
it breaks compiled code, source or both, and the version change it calls for:
var result = ApiComparison.Compare(ApiReader.Read("old/MyLib.dll"), ApiReader.Read("new/MyLib.dll"));
foreach (var change in result.Changes)
Console.WriteLine($"{change.Where} {change.Kind} {change.Part} {change.Old} → {change.New} {change.Level}");
Console.WriteLine(result.Suggest(baseline: new Version(1, 4, 0)));
Lib › Widget › Draw(Canvas) Removed void Draw(Canvas canvas) → Major
Lib › IShape › Resize(double) Added → void Resize(double factor) Major
Lib › A › M(int) Changed parameter 1 name count → total Major
Lib › Widget Changed base type Shape → Mid Minor
Major
Breaks, Compatibility and Note say why: the removal breaks callers, binary and source; the new interface member
breaks implementers; the renamed parameter breaks callers that pass it by name, in source only; Mid derives from
Shape, so Shape is still a base.
A break that only affects implementers or inheritors does not ask for a major version when nobody outside can implement
or derive from the type, or when the type is declared (an attribute named InternalImplementationOnlyAttribute) or
configured (ApiComparisonOptions.NotExtensionPoints) not to be an extension point; it is still listed. Below 1.0 a
break asks for a minor version.
The JustAssembly-compatible comparison
ApiDiff.Comparetakes two paths and returns the report assembly-differ's commands print.VersionChange.Classifysays whether a difference calls for a patch, minor or major bump.UsedApi.ReadandUsageFilter.Applynarrow a diff down to the changes some code is affected by.
Targets netstandard2.0 and net10.0. It is the comparison behind assembly-differ.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Nullean.PublicApi (>= 1.1.0)
- System.Collections.Immutable (>= 11.0.0)
- System.Memory (>= 4.6.3)
- System.Reflection.Metadata (>= 11.0.0)
-
net10.0
- Nullean.PublicApi (>= 1.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.0 | 0 | 11/14/2026 |