
如何在 aspnetcore 仓库新增公共 API 并修复 RS0016 基线错误【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore当你在 aspnetcore 仓库的某个实现src项目里新增一个 public 类型或成员时编译会出现RS0016之类的公共 API 分析器报错仓库为每个项目维护了PublicAPI.Shipped.txt/PublicAPI.Unshipped.txt两个基线文件且这些检查默认开启。本文给出从 docs/APIBaselines.md 提炼的完整操作路径把新 API 写进基线文件、用 Visual Studio 的快速修复消除RS0016、再次构建验证并说明哪些文件不能动、修不掉的分析器错误如何用特性抑制。适用环境是本地已能构建仓库的贡献者工作流前置步骤见 docs/BuildFromSource.md。准备条件先让仓库可以构建公共 API 检查默认对所有实现项目生效所以操作前需要先按 docs/BuildFromSource.md 完成仓库构建环境克隆仓库时带--recursive仓库含子模块已有克隆可用git submodule update --init --recursive补齐。在仓库根目录运行还原脚本安装仓库所需的本地 .NET 依赖Windows 下是./restore.cmdLinux/macOS 下是./restore.sh。如果你要走本文的 Visual Studio 快速修复主路径还需要 Windows 上用仓库自带脚本安装 Visual Studio./eng/scripts/InstallVisualStudio.ps1文档要求使用 preview 通道以匹配仓库使用的预览版 SDK并在仓库根目录执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser。如果你的项目是 non-shipping 或仅测试用的项目可以不在项目文件中加基线文件而是直接把检查关掉AddPublicApiAnalyzersfalse/AddPublicApiAnalyzers为新项目补齐基线文件新建一个实现项目时必须手动添加基线文件因为分析器默认开启。按文档中的做法把仓库根目录下的eng/PublicAPI.empty.txt复制成新项目目录下的两个文件命令在仓库根目录执行{new folder}替换为你新项目的目录名即.csproj所在目录cp .\eng\PublicAPI.empty.txt {new folder}\PublicAPI.Shipped.txt cp .\eng\PublicAPI.empty.txt {new folder}\PublicAPI.Unshipped.txtPublicAPI.empty.txt的内容只有一行#nullable enable所以新项目的两个基线文件初始都是这一行新 API 追加在其后。仓库中已有项目的基线文件可作为格式参照例如 src/OpenApi/src/PublicAPI.Unshipped.txt 和 src/OpenApi/src/PublicAPI.Shipped.txt。理解两个基线文件的分工PublicAPI.Shipped.txt包含上一个大版本中已发布的 API。这个文件只应由构建团队在大版本发布后修改除此之外永远不要改它。PublicAPI.Unshipped.txt包含上一个大版本以来新增的 API。你新增、删除或修改公共 API 时改的都是这个文件。大版本发布之后构建团队会用脚本把PublicAPI.Unshipped.txt的内容移入PublicAPI.Shipped.txt这一步不需要贡献者参与。基线条目的写法新增、删除与变更三种情况都往PublicAPI.Unshipped.txt里加条目。新增 API 一条记录即可#nullable enable Microsoft.AspNetCore.Builder.NewApplicationBuilder.New() - Microsoft.AspNetCore.Builder.IApplicationBuilder!删除 API 时加一条带*REMOVED*前缀的记录#nullable enable *REMOVED*Microsoft.Builder.OldApplicationBuilder.New() - Microsoft.AspNetCore.Builder.IApplicationBuilder!修改 API包括让 API 变为 nullable-aware时需要加两条记录一条移除旧签名一条写入新签名#nullable enable *REMOVED*Microsoft.AspNetCore.DataProtection.Infrastructure.IApplicationDiscriminator.Discriminator.get - string! Microsoft.AspNetCore.DataProtection.Infrastructure.IApplicationDiscriminator.Discriminator.get - string?以上条目均摘自 docs/APIBaselines.md 的示例实际书写时应与你自己 API 的真实命名空间和签名一致。修复 RS0016 的主路径构建 快速修复文档给出的标准流程面向 Visual Studio其他编辑器可换成你惯用的构建方式如有需要先把新项目加入根解决方案文件和相关的*.slnf文件。文档表述为AspNetCore.sln当前仓库根目录实际提供的是 AspNetCore.slnx两者指代同一类根级解决方案文件以仓库当前状态为准。在包含相关*.slnf的目录下启动解决方案例如src/Http目录startvs.cmd。各区域如 src/Http/startvs.cmd的启动脚本会带上本地 .NET SDK 环境并打开对应的 slnf。按 F6 构建或你惯用的构建方式。点击某个RS0016或其他RS00xx错误。在编辑器中对带下划线的符号右键或直接点它左侧的“quick fix”图标快捷键Ctrl.也可以。选择 “Add Blah to public API” 或 “Fix all occurrences in … Solution”然后点击 Apply。再次按 F6 构建确认快速修复没有漏掉条目、也没有冒出其他RS00xx错误——文档明确说这种情况“并不少见”。其余无法通过快速修复解决的分析器问题按下节方式处理。无法快速修复的 RS00xx 错误用特性抑制对于确实无法修复的常见错误例如兼容性问题文档要求如果要抑制必须用[SuppressMessage]特性不要做全局抑制也不要用#pragma因为特性可以把理由写在明面上。文档给出的示例[SuppressMessage(ApiDesign, RS0026:Do not add multiple public overloads with optional parameters, Justification Required to maintain compatibility)] // 或 [SuppressMessage(ApiDesign, RS0027:Public API with optional parameter(s) should have the most parameters amongst its public overloads., Justification Required to maintain compatibility)]验证与限制验证方式修复后再次完整构建F6 或等价的构建命令。判定标准是构建不再报RS0016或其他RS00xx公共 API 分析器错误由于快速修复会漏条目这一步不能省略。边界限制PublicAPI.Shipped.txt除构建团队在大版本发布后更新外任何情况下都不要修改PublicAPI.Unshipped.txt的“新 API”语义是相对于上一个大版本而言的。下一步把公共 API 变更送审基线修好、构建通过后涉及公共 API 新增或变更的实现 PR 还需要走 API 评审流程见 docs/APIReviewProcess.md开 PR 时用api-reviewskill 从来源 issue 和 PR 建一个独立的 API proposal issueproposal 必须链接来源 issue 与实现 PR并打上api-suggestion、api-proposal标签。标记api-ready-for-review前issue 需要有简短描述和 ref-assembly 格式的 API 变更评审团队每周开会评审批准后会加api-approved标签且该标签覆盖的必须是最终实现的 API 形态。如果你先写了设计再实现CONTRIBUTING.md 也建议以 design proposal issue 先与团队达成一致。【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考