如果你想贡献代码,请阅读本篇内容。
需要注意的事,V10以前的版本只接受问题修复,本篇内容是V10及后续版本开发的贡献说明。
- .NET 命令行工具
- .NET 模板项目
- ASP.NET Core
- Blazor
- Entity Framework Core
- SQLite
- Roslyn代码分析
- PowerShell脚本
- MCP
- .NET SDK 9.0 (正式版需要10.0)
- Visual Studio 2022/VS Code
- PowerShell 7.0 或更高版本
- src:源代码目录
- Command/CommandLine: 命令行工具项目
- Services/AterStudio: ASP.NET Core项目,包括Blazor Server和MCP Server。
- Template/templates: 模板项目
- scripts:脚本目录
- installTemplate.ps1: 在本机打包并安装最新模板的脚本
- PublishToLocal.ps1:将命令行工具安装到本机,以便在本机上测试
- test:测试项目
模板项目位于\src\Template目录下,可通过Pack.csproj来配置打包行为。
如果要修改模板,请使用VS打开src\Template\templates\ApiStandard目录下的MyProjectName.slnx。
模板项目自带Aspire,所以你可以直接使用Aspire Host运行项目,也可能使用dotnet run分别运行。
直接打开根目录下的Ater.dry.slnx解决方案。
该解决方案包含了命令行项目和Studio项目(ASP.NET Core)。
命令行工具使用Spectre.Console.Cli类库,相关代码在src/Command目录下。
CommandLine:定义命令行参数和选项Command.Share:命令行的执行逻辑
部分共用的逻辑在src/Definition/Share/Services/CommandService.cs中实现,如:
你可以在CommandLine项目下,运行该项目,并传递存着参数,以测试命令行的功能。
Studio包含了前后端,在开发过程中,你可以分别运行AterStudio和ClientApp项目。
前端项目使用npm run start命令来运行。
- 执行
installTemplate.ps1脚本将模板安装到本地,创建解决方案时需要使用。模板没有更新时,可以跳过此步骤。 - 执行``PublishToLocal.ps1`脚本将命令行工具安装到本地。以测试安装后的效果实际使用效果。
- 绝大多时间,直接运行
AterStudio项目进行调试即可。
Note
请使用powerShell 7.0 或更高版本来运行脚本。
ater.dry的项目结构也遵循ater.template模板的结构,尽管它不是一个典型的模板项目。也就是说模板项目的第一个使用方就是ater.dry,
在一定程序上,模板项目与ater.dry可以互相改进。
在开发过程中,可以形成一个自循环:
- 完善和修改
ater.dry. - 本地安装完善后的
ater.dry - 使用最新的
ater.dry来辅助实现1
在一定程度上形成了边开发边测试的循环,从而能保存最基本的功能的可用性。
V10版本将全面支持中英文双语环境,这要求用户交互的部分(用户能够看到的),都需要支持多语言。
命令行和后端服务的多语言文件位于src\Definition\Share目录下,包含Localizer.zh-CN.resx和Localizer.en-US.resx。
前端的多语言内容待定。
- 请先在dev-v10分支进行开发,可随时提交代码到该分支。
- 在完成一项新的功能或特性开发后,经过本地测试后,请创建pull request将代码合并到v10分支。
发包时请使用仓库内的 release 技能,它记录了版本递增、ReleaseNotes、双语文档、测试、nuget 分支合并和 CI 发布流程。
默认情况下将 src/Apps/CommandLine/CommandLine.csproj 的版本号增加一个小版本,并同步 src/Apps/Dashboard/Dashboard.csproj。完成验证后,将发布提交合并并推送到 nuget 分支;.github/workflows/publish-nuget.yml 会自动打包并发布 NuGet。
src/Apps/CommandLine/ShareDlls.txt 已纳入版本控制,CI 打包时由 scripts/PublishToLocal.ps1 -withStudio:$true 直接读取。项目依赖发生变化时,应先运行 scripts/CheckSharedDlls.ps1 更新该清单并一并提交。