Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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
--versionShows version information.
--generate-suppression-fileGenerates a compatibility suppression file.
--preserve-unnecessary-suppressionsPreserves 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-suppressionsPermits 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-fileis specified. If unspecified, the first--suppression-filepath is used.--noWarn <NOWARN_STRING>Specifies the diagnostic IDs to suppress. For example,
"$(NoWarn);PKV0001".--respect-internalsChecks both
internalandpublicAPIs.--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-nameEnables the rule that checks whether parameter names have changed in public methods.
--enable-rule-attributes-must-matchEnables 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-modePerforms API compatibility checks in strict mode.
Package-specific options
These options are only applicable when packages are compared.
--baseline-packageSpecifies the path to a baseline package to validate the current package against.
--enable-strict-mode-for-compatible-tfmsValidates 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-packageValidates API compatibility in strict mode for assemblies that are compatible based on their target framework.
--enable-strict-mode-for-baseline-validationValidates API compatibility in strict mode for package baseline checks.
--package-assembly-referencesSpecifies 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-referencesSpecifies 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-ignoreSpecifies 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.