用途:排查 dotnet/dotnet VMR 中源码构建(source-build)失败,适用于出现 prebuilt、source-build/source-only 失败、source-build-assets 等相关提示时。Linux 发行版需完全从源码构建 .NET,CI 中 source-only(SB)腿负责验证,腿名以 SB_ 开头(如 SB_CentOSStream10_Online_MsftSdk_x64)。
主要产物与文件:每个 SB 腿产出 <leg>_BuildLogs_Attempt<N>(日志、binlog、prebuilt 报告)和 <leg>_Artifacts/_Artifacts_Attempt<N>(构建资产与包)。日志中关键文件包括 artifacts/log/Release/prebuilt-usage.xml(全部仓库的预生成包使用)、各仓库下的 prebuilt-usage.xml、Build.binlog(MSBuild binlog);产物中 packages/Release/NonShipping 与 Shipping 下为各仓库 nupkg。可按 format=file&subPath= 逐文件下载,路径分隔符编码为 %2F。
构建流程:按依赖顺序依次构建仓库,先前仓库产出的中间 nupkg 供后续仓库使用;构建顺序由 repo-projects/ 下各 .proj 的 <RepositoryReference> 决定。流程分准备(下载 PSB 产物、配置包源)、按序构建、收尾(eng/finish-source-only.proj,校验无 prebuilt 或投毒包泄漏)。Stage 2(自举)用 stage 1 的 SDK 重建整个产品,验证自托管;仅 stage 2 失败常与依赖、分析器/工具行为差异或版本不匹配有关。
包来源包括 SBRP(src/source-build-assets/src/referencePackages/ 下的 API 存根,及 externalPackages 下真实源码构建的外部包)、PSB(上一轮源码构建的可执行 nupkg,Prep 阶段从 ci.dot.net/public/source-build/ 下载)以及当前构建中更早仓库产出的包。prebuilt 常见原因:版本升级后不在 SBRP/PSB、请求较旧服务版本、新依赖无源码等价物、顶层版本变更引入传递依赖。
限制与其它检查:源码构建使用包投毒检测微软构建二进制泄漏,收尾步骤失败即表示泄漏;NewBinaries.txt 记录新增二进制,需移除或加入 eng/allowed-sb-binaries.txt 基线。仅源码构建的签名在构建后由 eng/sign-source-built-artifacts.proj 执行,受 /p:DotNetSourceOnlyPostBuildSign=true 控制,多数 SB 腿 disableSigning: true 跳过签名;VMR_Validation 的 ValidateSigning 仅在真实签名类型时运行。可见 binlog 用 binlog-mcp 查询,PR/文件用 github-mcp-server,构建日志/产物用 Azure DevOps MCP。具体失败处理步骤与更多细节资料未完整提供。