You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化CI/CD流水线:复用已编译二进制运行C#单元测试失败求助

复用CI/CD构建产物运行测试与迁移脚本的问题解决方案

核心结论

复用已构建产物的思路完全可行,你的方向没错——不需要重复构建整个依赖链,但问题出在测试项目未被纳入构建步骤,以及脚本变量语法错误。

问题分析

  1. 变量语法错误:脚本中$$PROJECT是错误写法,在Shell环境下双美元符号会被解析为单个$,导致实际未正确引用$PROJECT变量,构建和测试的目标项目不符合预期。
  2. 测试项目未被构建:你仅构建了应用项目(dotnet build $PROJECT),但测试项目是独立的,且应用项目不会反向引用测试项目,因此dotnet build不会自动构建测试项目——哪怕你在IDE的构建配置里勾选了同时构建,命令行的dotnet build只会处理你指定的目标(单个项目或解决方案)。
  3. 测试命令目标错误:dotnet test $PROJECT指定的是应用项目而非测试项目,自然找不到测试DLL;就算你指定了测试项目,因为之前没构建过,也会出现文件不存在的错误。

解决方案

方案1:构建整个解决方案(推荐)

如果应用和测试项目都在同一个解决方案里,直接构建整个解决方案,一次性完成所有项目(应用、类库、测试)的构建,之后测试和迁移均可复用构建产物:

CONFIGURATION=ProjectConfigurationName
dotnet tool install --global dotnet-ef
PATH="$PATH:/root/.dotnet/tools"
dotnet restore -s https://www.nuget.org/api/v2/
# 替换为你的解决方案实际路径
dotnet build ./YourSolution.sln --configuration $CONFIGURATION -p:Version=${VERSION}
# 指定测试项目路径运行测试
dotnet test ./ProjectName.Tests/ProjectName.Tests.csproj --no-build --configuration $CONFIGURATION
# 生成迁移脚本(指定应用项目)
dotnet ef migrations script --no-build --idempotent --project $PROJECT --context MyDbContext -o migrations.sql

方案2:单独构建测试项目(复用依赖产物)

如果不想构建整个解决方案,可以先构建应用及依赖类库,再单独构建测试项目(跳过依赖构建,因为已完成):

CONFIGURATION=ProjectConfigurationName
dotnet tool install --global dotnet-ef
PATH="$PATH:/root/.dotnet/tools"
dotnet restore -s https://www.nuget.org/api/v2/
# 构建应用项目及依赖的类库
dotnet build $PROJECT --configuration $CONFIGURATION -p:Version=${VERSION}
# 单独构建测试项目,--no-dependencies跳过已构建的依赖
dotnet build ./ProjectName.Tests/ProjectName.Tests.csproj --configuration $CONFIGURATION --no-dependencies -p:Version=${VERSION}
# 运行测试,复用已构建的测试项目产物
dotnet test ./ProjectName.Tests/ProjectName.Tests.csproj --no-build --configuration $CONFIGURATION
# 生成迁移脚本
dotnet ef migrations script --no-build --idempotent --project $PROJECT --context MyDbContext -o migrations.sql

关键注意事项

  • 确保dotnet test的目标是测试项目的csproj文件或路径,而非应用项目。
  • --no-build参数仅在目标项目及其依赖已经完成构建时有效,否则会因缺少二进制文件报错。
  • 可通过测试项目csproj的<OutputPath>节点,确认构建产物的生成路径是否符合预期。

内容的提问来源于stack exchange,提问作者Vočko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:17:48