公共API生成器 11.1.0

dotnet add package PublicApiGenerator --version 11.1.0                
NuGet\Install-Package PublicApiGenerator -Version 11.1.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="PublicApiGenerator" Version="11.1.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add PublicApiGenerator --version 11.1.0                
#r "nuget: PublicApiGenerator, 11.1.0"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本的源代码中以引用包。
// Install PublicApiGenerator as a Cake Addin
#addin nuget:?package=PublicApiGenerator&version=11.1.0

// Install PublicApiGenerator as a Cake Tool
#tool nuget:?package=PublicApiGenerator&version=11.1.0                

PublicApiGenerator

Run tests Publish preview Publish release

License codecov Nuget Nuget GitHub Release Date GitHub commits since latest release (by date) Size

GitHub contributors Activity Activity Activity

PublicApiGenerator 不可用依赖且仅创建表示公共API的字符串。任何批准库都可以用来批准生成的公共API。PublicApiGenerator 从版本 10 开始支持 C# 8 可空引用类型

如何使用

install-package PublicApiGenerator

程序集的公共API

var publicApi = typeof(Library).Assembly.GeneratePublicApi();

多个类型的公共API

var myTypes = new[] { typeof(MyType), typeof(YetAnotherType) };
var publicApi = typeof(myTypes).GeneratePublicApi();

类型的公共API

var publicApi = typeof(MyType).GeneratePublicApi();

更多对API输出的控制

var options = new ApiGeneratorOptions { ... };
var publicApi = typeof(Library).Assembly.GeneratePublicApi(options);

手动

[Fact]
public void my_assembly_has_no_public_api_changes()
{
    var publicApi = typeof(Library).Assembly.GeneratePublicApi();

    var approvedFilePath = "PublicApi.approved.txt";
    if (!File.Exists(approvedFilePath))
    {
        // Create a file to write to.
        using (var sw = File.CreateText(approvedFilePath)) { }
    }

    var approvedApi = File.ReadAllText(approvedFilePath);

    Assert.Equal(approvedApi, publicApi);
}

Shouldly

Shouldly

install-package Shouldly

[Fact]
public void my_assembly_has_no_public_api_changes()
{
    var publicApi = typeof(Library).Assembly.GeneratePublicApi();

    //Shouldly
    publicApi.ShouldMatchApproved();
}

ApiGenerator 本身 使用 此方法来测试API更改。

ApprovalTests

ApprovalTests

install-package ApprovalTests

[Fact]
public void my_assembly_has_no_public_api_changes()
{
    var publicApi = typeof(Library).Assembly.GeneratePublicApi();
    var writer = new ApprovalTextWriter(publicApi, "txt");
    var approvalNamer = new AssemblyPathNamer(assembly.Location);
    Approvals.Verify(writer, approvalNamer, Approvals.GetReporter());
}

private class AssemblyPathNamer : UnitTestFrameworkNamer
{
    private readonly string name;

    public AssemblyPathNamer(string assemblyPath)
    {
        name = Path.GetFileNameWithoutExtension(assemblyPath);
    }

    public override string Name
    {
        get { return name; }
    }
}

验证

验证

install-package Verify.Xunit

[UsesVerify]
public class Tests
{
    [Fact]
    public Task my_assembly_has_no_public_api_changes()
    {
        var publicApi = typeof(Library).Assembly.GeneratePublicApi();

        return Verifier.Verify(publicApi);
    }
}

install-package Verify.NUnit

[Test]
public Task my_assembly_has_no_public_api_changes()
{
    var publicApi = typeof(Library).Assembly.GeneratePublicApi();

    return Verifier.Verify(publicApi);
}

install-package Verify.MSTest


[TestClass]
public class VerifyObjectSamples :
    VerifyBase
{
    [TestMethod]
    public Task my_assembly_has_no_public_api_changes()
    {
        var publicApi = typeof(Library).Assembly.GeneratePublicApi();

        return Verifier.Verify(publicApi);
    }
}

PublicApi 生成器全局工具

安装

dotnet tool install -g PublicApiGenerator.Tool

更新

dotnet tool update -g PublicApiGenerator.Tool

移除

dotnet tool uninstall -g PublicApiGenerator.Tool

示例

为运行时框架 netcoreapp2.1net461 生成 5.6.0 的公共API

generate-public-api --target-frameworks "netcoreapp2.1;net461" --package FluentAssertions --package-version 5.6.0

为运行时框架 net47 生成 5.* 的公共API

generate-public-api --target-frameworks net47 --package FluentAssertions --package-version 5.*

注意:当指定单个目标框架时,API将生成到标准输出。要写入文件,可以采用shell重定向

generate-public-api --target-frameworks net47 --package FluentAssertions --package-version 5.* > api.txt

或指定一个输出目录以强制生成API文件

generate-public-api --target-frameworks net47 --package FluentAssertions --package-version 5.* --output-directory .

为运行时框架 net47 生成版本5.6.0的公共API(精确版本匹配)

generate-public-api --target-frameworks net47 --package FluentAssertions --package-version [5.6.0]

为运行时框架 netcoreapp2.2net452 生成版本7.1.4的公共API。注意NServiceBus包不包含NServiceBus.dll,因此需要指定包含公共API的程序集。

generate-public-api --target-frameworks "netcoreapp2.2;net452" --package NServiceBus --package-version 7.1.4 --assembly NServiceBus.Core.dll

为我的get上可用的NServiceBus版本生成公共API

generate-public-api --target-frameworks "netcoreapp2.2;net452" --package NServiceBus --package-version 7.1.4 --assembly NServiceBus.Core.dll --package-source https://www.myget.org/F/particular/api/v3/index.json

命令行参数

--target-frameworks framework|"framework;framework"

在恢复包时将使用的目标框架。目标框架还用作生成公共API的运行时。需要指定一个有效的运行时框架。例如

  • "netcoreapp2.2;net452" 用于构建针对 netcoreapp2.2net452 的公共API
  • "netcoreapp2.1;net461" 用于构建针对 netcoreapp2.1net461 的公共API
  • net47 用于构建针对 net47 的公共API

无法使用 netstandard2.0,因为它不是一个有效的运行时框架。

如果只提供一个目标框架,那么除非指定了--output-directory选项,否则API将生成到标准输出。

--package-name PackageName

有效的nuget包名。例如

  • FluentAssertions
  • NServiceBus

使用--package-name开关时,必须使用--package-version开关。

--package-version Version

nuget包版本或如由https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-fileshttps://docs.microsoft.com/en-us/nuget/concepts/package-versioning#version-ranges-and-wildcards指定的浮动版本。例如

  • 8.1.1
  • 8.0
  • 8.0-*
--package-source Source

允许指定一个或多个包源以查找包。

--assembly Assembly.dll

要生成公共API的程序集名称(包括扩展名),如果它与包名不同。例如

  • PublicApiGenerator.dll
  • NServiceBus.Core.dll
--project-path

包含需要生成的公共API的csproj文件的路径。默认情况下将生成发布构建。当使用项目路径开关时,需要指定--assembly开关以指向包含公共API的输出程序集。例如

  • ..\PublicApiGenerator\PublicApiGenerator.csproj
--working-directory Path

用于生成工作原型的临时工作目录。

--output-directory Path

公共API文本文件应移动到的输出目录。以 *.received.txt 结尾

--generator-version Version

默认情况下,将使用PubliApiGenerator的最新稳定版本作为全局工具,在全局工具的大版本范围内生成公共API。可以通过在此开关中指定要使用的版本来覆盖PublicApiGenerator版本。例如

  • 8.1.0
--verbose

关于幕后发生情况的详细信息

leave-artifacts

为了故障排除目的,可能需要查看临时工作文件。通过指定此开关, temperative csproj文件和所有临时文件夹在运行后将不会被删除。请注意,这可能会显著减少可用磁盘空间,因为包括编译时间原文件在内的所有文件都没有被删除。

wait-time-in-seconds

等待API生成过程结束的秒数(默认60秒)。如果使用了多个目标框架,则等待时间针对每个目标框架应用。如果在给定的时间内进程没有结束,将抛出 TimeoutException

产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (1)

显示依赖 PublicApiGenerator 的前 1 个 NuGet 包

下载
ApiApprover

只需添加此包即可添加一个测试,该测试生成一个公共 API 的字符串,并将其发送到 Approval Tests 以批准任何公共 API 更改。防止意外错过破坏性 API 变更并再次打破语义版本控制。

GitHub 仓库 (49)

显示最流行的 5 个依赖 PublicApiGenerator 的 GitHub 仓库

仓库 星星
reactiveui/ReactiveUI
一个受函数式响应式编程启发的先进、可组合、函数式响应式模型-视图-视图模型框架,适用于所有 .NET 平台。ReactiveUI 允许您将可变状态从用户界面中抽象出来,在可读性强的位置表达某个特性的概念,并提高应用程序的可测试性。
serilog/serilog
具有完全结构化事件的简单 .NET 记录
dotnet/reactive
.NET 的响应式扩展
graphql-dotnet/graphql-dotnet
为 .NET 提供 GraphQL
Azure/azure-sdk-for-net
此存储库用于 Azure SDK for .NET 的积极开发。对于 SDK 的用户,我们建议访问我们的公开开发者文档 https://learn.microsoft.com/dotnet/azure/ 或我们的版本开发者文档 https://azure.github.io/azure-sdk-for-net/。
版本 下载 最后更新
11.1.0 202,205 12/3/2023
11.0.0 202,033 3/6/2023
10.5.0 435 3/6/2023
10.4.1 254 3/6/2023
10.4.0 260 3/6/2023
10.3.0 251,812 1/31/2022
10.2.0 545,550 6/26/2020
10.1.2 6,970 6/18/2020
10.1.1 718 6/17/2020
10.1.0 4,305 5/18/2020
10.0.2 89,888 1/27/2020
10.0.1 124,405 12/4/2019
10.0.0 1,275 12/1/2019
9.3.0 194,104 8/2/2019
9.2.0 1,620 8/2/2019
9.1.0 13,097 6/30/2019
9.0.0 2,441 6/13/2019
9.0.0-beta3 1,341 3/31/2019
9.0.0-beta2 1,335 3/29/2019
9.0.0-beta1 1,160 3/29/2019
8.1.0 48,464 1/7/2019
8.0.1 7,239 9/23/2018
8.0.0 2,376 7/24/2018
7.1.0 1,560 7/18/2018
7.0.1 4,827 5/7/2018
7.0.0 1,473 3/10/2018
6.6.0 1,306 3/9/2018
6.5.2 1,070 3/8/2018
6.5.1 1,156 3/7/2018
6.5.0 3,694 11/17/2017
6.4.0 2,755 10/10/2017
6.1.0-beta2 3,003 5/22/2017
6.1.0-beta1 2,731 5/15/2017
6.0.0 11,936 12/14/2016
5.0.0 4,075 11/21/2016
4.2.0 3,593 11/2/2016
4.1.0 3,191 10/6/2016
4.0.1 16,346 2/2/2016
4.0.0 1,603 2/2/2016