C#项目CI/CD需显式安装.NET SDK并正确配置:指定runs-on、用actions/setup-dotnet@v4匹配targetframework、必含actions/checkout@v4;测试失败多因缺失Test.Sdk或跨平台API;发布须用Secrets管理密钥,NuGet还原失败常因私有源未配置。

GitHub Actions 是 C# 项目实现 CI/CD 最轻量、最直接的方案,不需要自建 Jenkins 服务器,也不依赖 Azure DevOps 订阅。只要你有 GitHub 仓库,就能跑起完整的构建、测试、发布流程。
怎么写 .github/workflows/ci.yml 才能真正编译 C# 项目
很多初学者直接套用 Node.js 模板,结果 dotnet build 报错“command not found”——因为默认 Ubuntu runner 不自动装 .NET SDK。
- 必须显式指定
runs-on: ubuntu-latest或windows-latest,并用actions/setup-dotnet@v4安装对应 SDK 版本 -
dotnet-version要和项目global.json或.csproj中的<targetframework></targetframework>匹配(比如net8.0就得配8.x) - 别漏掉
actions/checkout@v4,否则工作流根本拉不到代码
最小可用示例:
name: C# CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: Build
run: dotnet build --configuration Release
dotnet test 运行失败常见原因
不是所有测试项目都能直接 dotnet test 成功。常见卡点:
系统化设计数字化解决方案,涵盖方案类型识别、政策背景分析、需求分析、建设思路设计、架构设计(业务、功能、数据、技术四维度)、技术选型、具体建设内容、实施规划、风险评估和投资估算的全流程能力。适用于规划类、申报类、可研类、投标类和工作汇报类等多种方案产出场景,覆盖政府数字化转型和企业数字化转型两大核心领域。
- 测试项目未引用
Microsoft.NET.Test.Sdk—— 编译会过,但dotnet test找不到适配器,报No test is available - 使用了
xunit但没装xunit.runner.visualstudio或对应 CLI runner 包 - 测试里用了 Windows-only API(如
Registry),却在ubuntu-latest上跑,直接抛PlatformNotSupportedException
建议:CI 中统一用 dotnet test --no-build --verbosity normal,加 --verbosity 能快速定位是找不到测试还是运行崩溃。
怎么把 dotnet publish 输出部署到云环境
发布本身很简单:dotnet publish -c Release -o ./publish,但“部署到哪”和“怎么鉴权”才是关键。
- 部署目标决定你用什么 Action:推 Docker 镜像用
docker/login-action,发到 Azure Web App 用azure/webapps-deploy@v2,微信云托管则要用官方 CLI 工具 +WXCLOUD_APPID/WXCLOUD_CLI_SECRET密钥 - 密钥绝不能硬编码进 YAML,必须存在 GitHub Secrets 里,然后用
${{ secrets.WXCLOUD_APPID }}引用 - Windows 环境下发布 ASP.NET Core 站点时,注意
--self-contained false(依赖系统运行时)比true更省空间、启动更快
为什么本地能跑通,CI 却提示 NuGet 包还原失败
典型错误信息:NU1101: Unable to find package xxx 或 NU1603: xxx depends on yyy (>= 1.0.0) but yyy was not found.
- 检查
.csproj是否用了私有 NuGet 源(比如公司内网 feed),CI 默认只走 nuget.org - 需要在 workflow 里加一步
nuget/authenticate或手动写NuGet.Config并用actions/upload-artifact传入 - 更稳妥的做法:用
dotnet restore --configfile NuGet.Config显式指定配置文件路径
最常被忽略的一点:C# 项目若含多个 .sln 文件,dotnet restore 必须指定具体 sln 路径,否则可能只还原了部分项目依赖。

















