公共API生成器 11.1.0
dotnet add package PublicApiGenerator --version 11.1.0
NuGet\Install-Package PublicApiGenerator -Version 11.1.0
<PackageReference Include="PublicApiGenerator" Version="11.1.0" />
paket add PublicApiGenerator --version 11.1.0
#r "nuget: PublicApiGenerator, 11.1.0"
// 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
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
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
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.1
和 net461
生成 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.2
和 net452
生成版本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.2
和net452
的公共API"netcoreapp2.1;net461"
用于构建针对netcoreapp2.1
和net461
的公共APInet47
用于构建针对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-files和https://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 已计算。 |
-
.NETStandard 2.0
- Mono.Cecil (>= 0.11.5)
- System.CodeDom (>= 8.0.0)
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 |