命令行
Perigon 提供命令行工具 perigon,用于创建解决方案、补充资源、生成代码、打包模块、安装模块,以及启动 Studio 或 Agent MCP 服务。
快速开始
查看命令总览:
perigon -h
查看某个命令的详细帮助:
perigon <command> -h
例如:
perigon add -h perigon generate -h perigon generate request -h
命令概览
当前 perigon -h 输出的主要命令如下:
| 命令 | 说明 |
|---|---|
new <name> |
创建新的 .NET 解决方案 |
update |
将当前项目与最新 Perigon 模板对比并更新 |
add |
向当前解决方案中添加资源 |
studio |
启动 Perigon Studio |
generate |
执行代码生成 |
agent |
初始化 Agent 配置或启动 Agent MCP 服务 |
module pack <ModuleName> <ServiceName> |
将模块打包为 zip 文件 |
module install <PackagePath> <ServiceName> |
将模块包安装到项目中 |
new
new 命令用于创建新的解决方案,效果与通过 Studio 图形界面创建基本一致。
perigon new <name>
示例:
perigon new DemoApp
帮助信息:
DESCRIPTION:
Create new .NET solution
USAGE:
perigon new <name> [OPTIONS]
EXAMPLES:
perigon new name
ARGUMENTS:
<name> Solution Name
OPTIONS:
-h, --help Prints help information
执行后,CLI 会引导你完成解决方案初始化,例如:
- 选择数据库类型,例如
SqlServer、PostgreSQL - 选择缓存类型
- 选择官方模块(如
Perigon.SystemMod、Perigon.CMSMod、Perigon.ResourceMod) - 选择前端集成方式
- 指定输出目录,默认使用当前目录
- 确认配置并开始生成
说明:
- 官方模块列表来自
Perigon.Modules/modules.json。 - 选择的官方模块会在解决方案生成完成后自动安装到目标服务中。
- 如果读取官方模块列表失败,命令会给出警告,但仍然可以继续创建解决方案。
update
update 命令用于将已有项目与最新的 Perigon 项目模板进行对比,并按选择结果应用差异。必须在交互式终端中从解决方案根目录或其子目录执行:
perigon update
执行前 CLI 会提示模板更新可能覆盖本地修改,建议先创建并切换到新的 Git 分支。随后 CLI 会:
- 直接执行
dotnet new install Perigon.templates,确保使用最新的Perigon.templates模板。 - 使用当前项目的模板类型和前端模式,在临时目录生成一个项目副本。
- 进入双栏差异选择器:左侧只显示模板中新增或发生变化的文件名及
(+新增行数 -删除行数),右侧显示完整相对路径和当前文件的彩色差异。 - 使用方向键移动文件,按空格选择或取消选择文件;可选择多个文件,按
PgUp/PgDn滚动右侧当前文件差异,按回车将已选择的差异应用到当前项目,按Esc取消。左右面板会显示当前可视范围和上下滚动提示,移动文件时会自动保持当前文件可见。
只有按回车应用后才会修改当前项目;按 Esc 会保留当前项目不变,但模板安装已经在选择界面前完成。比较时会忽略换行差异、行首尾空白、连续空白差异和空白行差异,避免格式化差异干扰;应用前仍会进行严格快照校验。命令只处理模板中存在的文件,不会删除当前项目独有的文件,也不会处理以下范围之外的文件:
src/Perigon下的.cs文件;src/Definition/ServiceDefault或src/Definition/ServiceDefaults下的.cs文件;src/Definition/Share下的.cs文件;src/Definition/EntityFramework下的.cs文件,但排除整个Migrations目录以及DefaultDbContext.cs、AnalysisDbContext.cs和ReadonlyDbContext.cs;scripts下的.ps1文件;.agent和.agents目录下的所有文件。
此外,src/Perigon/Perigon.AspNetCore/Constants/WebConst.cs 不参与对比,以保留项目自己的 Web 常量配置。
项目文件在对比后被其他操作修改时,更新会被拒绝,以避免将过期差异覆盖到当前项目。选中文件写入完成后,CLI 会在解决方案根目录自动执行 dotnet build,并输出编译成功或错误信息;编译失败不会撤销已经应用的文件,应根据错误修复或从 Git 回滚。应用前仍建议先查看差异并确保工作区已提交或可回滚。
add
add 是新增命令,用于在当前解决方案中创建模块以及服务。
perigon add [OPTIONS] <COMMAND>
示例:
perigon add module FileManagerMod perigon add service AdminService
帮助信息:
DESCRIPTION:
Add resources to the current solution
USAGE:
perigon add [OPTIONS] <COMMAND>
EXAMPLES:
perigon add module FileManagerMod
perigon add service AdminService
OPTIONS:
-h, --help Prints help information
COMMANDS:
module <ModuleName> Create a new module in the current solution
service <ServiceName> Create a new service in the current solution
add module
创建一个新模块:
perigon add module <ModuleName>
示例:
perigon add module FileManagerMod
说明:
ModuleName为模块名称- 可以省略
Mod后缀,CLI 会自动处理
帮助信息:
DESCRIPTION:
Create a new module in the current solution
USAGE:
perigon add module <ModuleName> [OPTIONS]
EXAMPLES:
perigon add module FileManagerMod
ARGUMENTS:
<ModuleName> Module name, `Mod` suffix is optional / 模块名称,可省略 `Mod` 后缀
OPTIONS:
-h, --help Prints help information
add service
创建一个新服务:
perigon add service <ServiceName>
示例:
perigon add service AdminService
说明:
ServiceName为服务名称- 新服务通过
Perigon.AspNetCore.SourceGeneration1.1.1 NuGet 包启用统一的编译期源代码生成,不再引用模板中的源生成器项目。
帮助信息:
DESCRIPTION:
Create a new service in the current solution
USAGE:
perigon add service <ServiceName> [OPTIONS]
EXAMPLES:
perigon add service AdminService
ARGUMENTS:
<ServiceName> Service name / 服务名称
OPTIONS:
-h, --help Prints help information
studio
studio 命令用于启动 Perigon Studio。大多数可视化操作都可以在 Studio 中完成。
perigon studio
帮助信息:
DESCRIPTION:
start Perigon Studio
USAGE:
perigon studio [OPTIONS] [COMMAND]
OPTIONS:
-h, --help Prints help information
COMMANDS:
update update studio
studio update
用于更新 Studio:
perigon studio update
帮助信息:
DESCRIPTION:
update studio
USAGE:
perigon studio update [OPTIONS]
OPTIONS:
-h, --help Prints help information
generate
generate 命令用于执行代码生成。
perigon generate [OPTIONS] <COMMAND>
当前支持实体模型生成规则输出、DTO/Manager/Controller 生成,以及客户端请求服务和模型文件生成。
帮助信息:
DESCRIPTION:
Code generate
USAGE:
perigon generate [OPTIONS] <COMMAND>
EXAMPLES:
perigon generate request ./openapi.json ./src/services -t angular
OPTIONS:
-h, --help Prints help information
COMMANDS:
entity 输出实体模型生成规则
dto <EntityPath> 根据实体生成 DTO
manager <EntityPath> 根据实体生成 Manager
controller <EntityPath> <ServicePath|ServiceName>
根据实体生成 Controller
request <path|url> <outputPath> Generate client request service and models
generate entity
输出实体模型创建规则,供 LLM 或其他代码生成流程参考;该命令本身不创建实体文件。
perigon generate entity
规则要求实体放在 src/Definition/Entity 项目中。指定模块时,在实体项目下使用“模块名 + Mod”作为目录名;目录不存在时创建。若模块尚不存在,应先创建模块。实体还应遵循 EntityBase、可空性、字符串长度、枚举说明、索引、关联关系和 DbSet 定义等约定。
generate dto
根据实体文件生成 DTO:
perigon generate dto <EntityPath> [-f|--force]
--force 用于覆盖已生成的文件。
generate manager
根据实体文件生成 Manager:
perigon generate manager <EntityPath> [-f|--force]
--force 用于覆盖已生成的文件。
generate controller
根据实体文件生成 Controller:
perigon generate controller <EntityPath> <ServicePath|ServiceName> [-f|--force]
ServicePath|ServiceName 可以是服务目录、.csproj 路径或服务名称;controller 也可以使用别名 api。--force 用于覆盖已生成的文件。
generate request
根据 OpenAPI 文档生成客户端请求服务和模型。
perigon generate request <path|url> <outputPath> [OPTIONS]
示例:
perigon generate request https://localhost:17001/swagger/v1/swagger.json ./src/services -t angular
帮助信息:
DESCRIPTION:
Generate client request service and models
USAGE:
perigon generate request <path|url> <outputPath> [OPTIONS]
EXAMPLES:
perigon generate request ./openapi.json ./src/services -t angular
ARGUMENTS:
<path|url> Local path or url, support json format
<outputPath> The output path
OPTIONS:
DEFAULT
-h, --help Prints help information
-t, --type angular Support types: csharp/angular/axios, default: angular
-m, --only-model false Only generate model files
-c, --cover-base-service false Overwrite generated base.service.ts
参数说明:
<path|url>:本地 OpenAPI 文件路径或远程 URL<outputPath>:生成代码的输出目录-t, --type:生成目标类型,支持csharp、angular、axios-m, --only-model:仅生成模型文件-c, --cover-base-service:覆盖已有的base.service.ts;默认保留用户自定义内容。该选项主要用于 Angular/Axios 前端请求客户端,Studio 默认也保留该文件;与-m/--only-model一起使用时不会生成或覆盖基础服务。C# 客户端生成的是BaseService.cs。
当目标类型为 csharp 时,OpenAPI 中的 multipart/form-data 会生成 multipart 上传方法,并使用文档中声明的 HTTP 方法(例如 POST 或 PUT)。单个文件字段使用 MultipartFile(封装 Stream、文件名和可选 MIME 类型),多个文件字段使用 IEnumerable<MultipartFile>;普通字符串、数字、布尔值和数组字段也会作为表单字段提交。Angular 和 Axios 客户端分别使用 File/File[],并按 schema 字段名写入 FormData,同时遵循 OpenAPI 声明的请求方法。C# 客户端生成不带 / 开头的相对 URI,并直接交给 HttpClient 与 BaseAddress 合并;配置 BaseAddress 时地址结尾必须带 /,例如 https://example.com/api/,这样才能正确保留多级基础路径。
当 OpenAPI 响应为 204、205、304 或请求方法为 HEAD 时,客户端生成无内容返回类型:C# 为 Task,Angular/Axios 为 void。C# 客户端收到非成功响应时,会将原始响应内容及状态信息放入 ResponseContent 的 Content、StatusCode 和 ReasonPhrase 字段,调用方可以在外层按实际错误格式处理。
当 OpenAPI 的 tag 包含空格或其他不能直接用于代码标识符的字符时,生成器会将其转换为 PascalCase 服务名。例如 User Management 会生成 UserManagementService 或 UserManagementRestService,服务文件名使用连字符格式。
agent
agent 命令用于初始化 Perigon Agent 集成,或启动供 IDE/代码 Agent 使用的 MCP 服务。
perigon agent [OPTIONS] <COMMAND>
主要子命令如下:
| 子命令 | 作用 |
|---|---|
init |
交互式选择 MCP 或 Skills 集成;MCP 选项会写入 .vscode/mcp.json。 |
mcp |
以 stdio transport 启动 Perigon Agent MCP Server。 |
perigon agent init perigon agent mcp
perigon agent mcp 会加载 Perigon 代码生成工具,并通过 MCP 客户端的 roots/list 获取当前项目根目录。工具能力和 IDE 配置示例请参阅 Perigon Agent MCP。旧版 perigon mcp config 和 perigon mcp start 不属于当前推荐命令。
module pack
module pack 命令用于将模块打包为 zip 文件。
perigon module pack <ModuleName> <ServiceName> [-v|--version <VERSION>] [--front-path <FRONT_PATH>]
示例:
perigon module pack FileManagerMod AdminService --version 1.2.0
帮助信息:
DESCRIPTION:
打包模块为zip文件
USAGE:
perigon module pack <ModuleName> <ServiceName> [OPTIONS]
EXAMPLES:
perigon module pack FileManagerMod AdminService --front-path src/ClientApp/WebApp/src/app/modules/file-manager
ARGUMENTS:
<ModuleName> Module name (with Mod suffix)
<ServiceName> Service name in Services directory
OPTIONS:
-h, --help Prints help information
-v, --version <VERSION> Package version; defaults to 1.0.0 when omitted / 包版本号;省略时默认使用 1.0.0
--front-path <FRONT_PATH> Frontend module directory to include in the package
参数说明:
ModuleName:模块名称,通常以Mod结尾ServiceName:服务名称,对应Services目录下的某个 API 服务目录-v/--version:可选。写入模块包元数据的版本号;省略时使用1.0.0并显示警告。--front-path:可选。要打包的单个前端模块目录,例如src/ClientApp/WebApp/src/app/modules/file-manager
前端模块打包与限制
指定 --front-path 后,CLI 会将该目录和同级的 share 目录写入 zip:
Frontend/file-manager/...
Frontend/share/...
file-manager来自--front-path的最后一个目录名;share必须与该模块目录同级。- 未指定
--front-path时,不会包含前端内容,后端模块仍可正常打包;指定的模块目录不存在时,打包会失败。若同级share不存在,则只打包模块目录。 - 仅包含指定模块目录及同级
share下的文件,不包含前端应用外壳、全局路由、根package.json、锁文件或其他模块目录。 - 该包不安装 npm/pnpm 依赖;目标项目必须自行具备兼容的前端工程与依赖。
module install
module install 命令用于将模块包安装到项目中,也支持直接使用官方包名安装模块。
perigon module install [PackagePath] [ServiceName] [--front-path <FRONT_PATH>]
示例:
perigon module install ./package_modules/FileManagerMod.zip AdminService
或直接安装官方模块:
perigon module install Perigon.SystemMod AdminService
帮助信息:
DESCRIPTION:
安装模块包到项目
USAGE:
perigon module install [PackagePath] [ServiceName] [OPTIONS]
EXAMPLES:
perigon module install ./package_modules/FileManagerMod.zip AdminService --front-path src/ClientApp/WebApp/src/app/modules
ARGUMENTS:
<PackagePath> Path to the module package zip file, or official package name like Perigon.SystemMod
<ServiceName> Service name in Services directory
OPTIONS:
-h, --help Prints help information
--front-path <FRONT_PATH> Directory where bundled frontend code will be restored
参数说明:
PackagePath:模块压缩包路径,或官方模块包名,例如Perigon.SystemModServiceName:目标服务名称,对应Services目录下的某个 API 服务目录--front-path:可选。前端模块根目录,例如src/ClientApp/WebApp/src/app/modules;它不是单个模块目录
前端恢复规则
当包内包含 Frontend 内容且提供 --front-path 时,安装会恢复为:
<FRONT_PATH>/file-manager/...
<FRONT_PATH>/share/...
- 模块目录中的同名文件会按模块安装行为覆盖。
share中已存在的同名文件不会覆盖,只会补充缺失文件。- 未提供
--front-path时,后端模块仍会安装,但前端文件不会恢复,并会显示提示。 - 模块包不再包含或处理
UseSelfServices;安装不会为了模块修改目标服务的Program.cs或默认中间件配置。
说明
- 命令说明以当前版本 CLI 的
perigon -h及各子命令帮助输出为准。 - 如果后续版本新增命令或参数,建议重新执行
perigon -h与perigon <command> -h后同步更新文档。