在 .NET 10 中使用 C# 实现 CI 脚本
目录IntroSampleMoreReferencesIntro之前我们介绍了过一期基于 dotnet-exec 来实现 C# 脚本实现 CI 基于 C# 编写构建脚本.NET 10 SDK 支持了 dotnet run file 或者 file-based app 我们可以直接使用 dotnet run file 支持来实现了不熟悉 dotnet run file 的朋友可以参考之前的文章介绍你好 dotnet run file, 再见 csproj.NET 10 Preview 6 run file 的一些优化基于此我们可以进一步简化我们的 CI 脚本了之前需要额外安装一个 tool现在直接使用 .NET SDK 就可以了SampleBuild script samplebuild.cs:#:package WeihanLi.Common1.0.84 using WeihanLi.Common.Helpers; var solutionPath ./WeihanLi.Npoi.slnx; string[] srcProjects [ ./src/WeihanLi.Npoi/WeihanLi.Npoi.csproj ]; string[] testProjects [ ./test/WeihanLi.Npoi.Test/WeihanLi.Npoi.Test.csproj ]; await DotNetPackageBuildProcess .Create(options { options.SolutionPath solutionPath; options.SrcProjects srcProjects; options.TestProjects testProjects; }) .ExecuteAsync(args);这里 bash script 里引用自己写的一个 nuget 包并指定了使用1.0.84版本构建 nuget 包的逻辑定义在了这个 nuget 包里以实现复用和精简构建脚本所以实际的脚本里只指定了解决方案文件路径与源代码项目路径和测试项目路径感兴趣的朋友可以参考源码https://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Helpers/BuildProcess.csGitHub Actions workflow sample:name: default on: push jobs: windows-build: runs-on: windows-latest steps: - uses: actions/checkoutv5 - name: Setup .NET SDK uses: actions/setup-dotnetv5 with: dotnet-version: 10.0.x - name: build run: dotnet build.cs这里构建脚本我们可以直接使用dotnet build.cs即可如果有参数要指定可以指定跟在后面比如dotnet build.cs --targetbuildrun sample:run-sample从 GitHub Action 记录里可以看到实际运行的效果示例https://github.com/WeihanLi/WeihanLi.Npoi/actions/runs/19406672198/job/55522318148再看一个 Azure DevOps 的示例和 GitHub Actions 是一样的trigger: branches: include: - * # must quote since * is a YAML reserved character; we want a string paths: exclude: - *.md pool: vmImage: windows-latest steps: - task: UseDotNet2 displayName: Use .NET SDK inputs: packageType: sdk version: 10.0.x - powershell: dotnet build.cs displayName: Powershell Script env: NuGet__ApiKey: $(nugetApiKey) NuGet__Source: $(nugetSourceUrl)这里指定了 powershell 也可以不指定使用默认的方式即可More在之前使用 dotnet-exec 来执行时为了不重复安装 dotnet tool 会在入口脚本build.ps1和build.sh里安装 dotnet tool因为平台差异需要指定两种脚本build.ps1给 Windows,build.sh给 Linux/Mac 用build.ps1:dotnet tool install -g dotnet-execute Write-Host dotnet-exec ./build/build.cs --args$ARGS -ForegroundColor GREEN dotnet-exec ./build/build.cs --args $ARGSbuild.sh:#!/bin/sh dotnet tool install -g dotnet-execute --prerelease export PATH$PATH:$HOME/.dotnet/tools echo dotnet-exec ./build/build.cs --args $ dotnet-exec ./build/build.cs --args $Linux 下有时候可能 dotnet tool 的 path 会没有设置所以这里会再设置一下将 dotnet tools 的路径导出到 PATH 里以免执行 tool 命令的时候找不到 tool使用 dotnet run file 就可以直接使用dotnet命令即可没太多平台差异也不太需要每个平台建一个 script 作为脚本入口如果你也想尝试下 C# 来做 CI 不妨也来试试吧References• https://github.com/WeihanLi/WeihanLi.Common/commit/8444d55c144964636087d007e41de2bd5811342e• https://github.com/WeihanLi/WeihanLi.Npoi/commit/7896791822182d2cac8a73fea31ffd5bde01788c• https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/.github/workflows/dotnet.yml• https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/build.cs• https://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Helpers/BuildProcess.cs• https://github.com/WeihanLi/WeihanLi.Npoi/actions/runs/19406672198/job/55522318148引入地址

相关新闻

4.2.2 慢查询案例

4.2.2 慢查询案例

下面通过一个完整的实战案例,从发现问题、配置日志、分析原因、索引优化到效果验证,完整展示慢查询的处理流程。🛒 1. 场景与准备 电商系统,订单表 orders 数据量约 500万行,用户频繁查询自己的订单并按创建时间倒序展…

2026/6/28 2:23:13阅读更多 →
LangChain内置工具,开发效率提升10倍!

LangChain内置工具,开发效率提升10倍!

搜索引擎类工具名称功能DuckDuckGoSearchRun使用 DuckDuckGo 搜索DuckDuckGoSearchResults获取 DuckDuckGo 搜索结果WikipediaQueryRun查询 WikipediaBingSearchRun使用 Bing 搜索(需要 API Key)BingSearchResults获取 Bing 搜索结果(需要 AP…

2026/6/28 2:23:13阅读更多 →
南京大学《数字逻辑与计算机组成》习题及答案PDF

南京大学《数字逻辑与计算机组成》习题及答案PDF

南京大学《数字逻辑与计算机组成》习题及答案 包括: 第1章二进制编码习题及答案.pdf 第2章数字逻辑基础习题及答案.pdf 第3章组合逻辑电路习题及答案.pdf 第4章时序逻辑电路习题及答案.pdf 第6章运算方法和运算部件习题及答案.pdf 第7章指令系统习题及答案.pdf 第8章…

2026/6/28 2:23:13阅读更多 →
DayZ社区离线模式:打造属于你的末日生存沙盒

DayZ社区离线模式:打造属于你的末日生存沙盒

DayZ社区离线模式:打造属于你的末日生存沙盒 【免费下载链接】DayZCommunityOfflineMode A community made offline mod for DayZ Standalone 项目地址: https://gitcode.com/gh_mirrors/da/DayZCommunityOfflineMode 厌倦了网络延迟、服务器维护或是只想一个…

2026/6/28 7:13:30阅读更多 →
同步请求和异步请求的性能测试代码

同步请求和异步请求的性能测试代码

性能测试说明 测试内容:连续发起20次HTTP请求,分别测试: 同步串行 requests多线程并发 requests协程异步 aiohttp 统一目标地址,控制超时,统计总耗时,直观对比差距。 完整测试代码 import time import thre…

2026/6/28 7:13:30阅读更多 →
D2RML终极指南:彻底解决暗黑2重制版多开登录难题的完整方案

D2RML终极指南:彻底解决暗黑2重制版多开登录难题的完整方案

D2RML终极指南:彻底解决暗黑2重制版多开登录难题的完整方案 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 还在为每次登录暗黑破坏神2重制版而耗费宝贵时间吗?每次切换账户都需…

2026/6/28 7:13:30阅读更多 →
py learning - day 2(列表特点、元组)

py learning - day 2(列表特点、元组)

列表与元组 一、列表 列表的特点 列表有以下特点: 可重复性:列表的元素是可以重复的;有序性:列表会严格记录每个元素“放进去的先后位置”,并且你可以通过下标(索引)精准地找到任意位置的元素&a…

2026/6/28 7:13:30阅读更多 →
实战指南:5个步骤高效部署开源传奇服务器OpenMir2

实战指南:5个步骤高效部署开源传奇服务器OpenMir2

实战指南:5个步骤高效部署开源传奇服务器OpenMir2 【免费下载链接】OpenMir2 Legend of Mir 2 Game server 项目地址: https://gitcode.com/gh_mirrors/op/OpenMir2 OpenMir2是一个基于C#开发的完整传奇2游戏服务器解决方案,完全兼容1.76经典版本…

2026/6/28 7:13:30阅读更多 →
信创版Java医院影像管理系统PACS (springboot+vue)

信创版Java医院影像管理系统PACS (springboot+vue)

医院影像管理系统,覆盖从患者登记、影像采集、诊断报告到胶片打印的全流程。系统支持放射(CT/MR/DR)、超声(US)、病理(PATH)三大影像专科,工业级影像查看器,支持 DICOM 标…

2026/6/28 7:08:30阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →