Microsoft.DotNet.ApiCompat.Tool global tool
The Microsoft.DotNet.ApiCompat.Tool tool lets you perform API compatibility checks outside of MSBuild. The tool has two modes:
- Compare a package against a baseline package.
- Compare an assembly against a baseline assembly.
Install
To install the tool, run the following command.
dotnet tool install --global Microsoft.DotNet.ApiCompat.Tool
For more information about installing global tools, see Install a global tool.
Usage
Microsoft.DotNet.ApiCompat.Tool [command] [options]
-or-
apicompat [command] [options]
Commands
package | --package <PACKAGE_FILE>
Validates the compatibility of package assets. If unspecified, the tool compares assemblies.
<PACKAGE_FILE>
specifies the path to the package file.
Options
Some options apply to both assembly and package validation. Others apply to assemblies only or packages only.
General options
--version
Shows version information.
--generate-suppression-file
Generates a compatibility suppression file.
--preserve-unnecessary-suppressions
Preserves unnecessary suppressions when regenerating the suppression file.
When an existing suppression file is regenerated, its content is read, deserialized into a set of suppressions, and then stored in a list. Some of the suppressions might no longer be necessary if the incompatibility has been fixed. When the suppressions are serialized back to disk, you can choose to keep all the existing (deserialized) expressions by specifying this option.
--permit-unnecessary-suppressions
Permits unnecessary suppressions in the suppression file.
--suppression-file <FILE>
Specifies the path to one or more suppression files to read from.
--suppression-output-file <FILE>
Specifies the path to a suppression file to write to when
--generate-suppression-file
is specified. If unspecified, the first--suppression-file
path is used.--noWarn <NOWARN_STRING>
Specifies the diagnostic IDs to suppress. For example,
"$(NoWarn);PKV0001"
.--respect-internals
Checks both
internal
andpublic
APIs.--roslyn-assemblies-path <FILE>
Specifies the path to the directory that contains the Microsoft.CodeAnalysis assemblies you want to use. You only need to set this property if you want to test with a newer compiler than what's in the SDK.
-v, --verbosity [high|low|normal]
Controls the log level verbosity. Allowable values are
high
,normal
, andlow
. The default isnormal
.--enable-rule-cannot-change-parameter-name
Enables the rule that checks whether parameter names have changed in public methods.
--enable-rule-attributes-must-match
Enables the rule that checks if attributes match.
--exclude-attributes-file <FILE>
Specifies the path to one or more files that contain attributes to exclude in DocId format.
Assembly-specific options
These options are only applicable when assemblies are compared.
-l, --left, --left-assembly <PATH>
Specifies the path to one or more assemblies that serve as the left side to compare. This option is required when comparing assemblies.
-r, --right, --right-assembly <PATH>
Specifies the path to one or more assemblies that serve as the right side to compare. This option is required when comparing assemblies.
--strict-mode
Performs API compatibility checks in strict mode.
Package-specific options
These options are only applicable when packages are compared.
--baseline-package
Specifies the path to a baseline package to validate the current package against.
--enable-strict-mode-for-compatible-tfms
Validates API compatibility in strict mode for contract and implementation assemblies for all compatible target frameworks. The default is
true
.--enable-strict-mode-for-compatible-frameworks-in-package
Validates API compatibility in strict mode for assemblies that are compatible based on their target framework.
--enable-strict-mode-for-baseline-validation
Validates API compatibility in strict mode for package baseline checks.
--package-assembly-references
Specifies the paths to assembly references or their underlying directories for a specific target framework in the package. Separate multiple values with a comma.
--baseline-package-assembly-references
Specifies the paths to assembly references or their underlying directories for a specific target framework in the baseline package. Separate multiple values with a comma.
--baseline-package-frameworks-to-ignore
Specifies the set of target frameworks to ignore from the baseline package. The framework string must exactly match the folder name in the baseline package.
Examples
The following command compares the current and baseline versions of an assembly.
apicompat --left bin\Release\net8.0\LibApp5.dll --right bin\Release\net8.0\LibApp5-baseline.dll
The following command compares the current and baseline versions of a package.
apicompat package "bin\Release\LibApp5.1.0.0.nupkg" --baseline-package "bin\Release\LibApp5.2.0.0.nupkg"
The following example shows the command to compare the current and baseline versions of an assembly, including the check for parameter name changes. The example also shows what the output might look like if a parameter name has changed.
>apicompat -l LibApp5-baseline.dll -r LibApp5.dll --enable-rule-cannot-change-parameter-name
API compatibility errors between 'LibApp5-baseline.dll' (left) and 'LibApp5.dll' (right):
CP0017: Parameter name on member 'KitchenHelpers.ToastBreadAsync(int, int)'
changed from 'slices' to 'numSlices'.
API breaking changes found. If those are intentional, the APICompat
suppression file can be updated by specifying the '--generate-suppression-file' parameter.