IGeekFan.FreeKit.CLI
FreeKit 命令行工具,提供基于 Scriban 模板引擎的代码脚手架能力。安装为 .NET Global Tool,命令名 freekit。
安装
dotnet tool install --global FreeKit.CLI
# 验证安装
freekit --help
依赖
System.CommandLine— 命令行框架Scriban— 模板引擎Serilog— 结构化日志
命令
根命令
freekit [--silent]
| 选项 | 说明 |
|---|---|
--silent | 静默模式,将日志级别提升到 Warning |
example — 示例命令
freekit example --title "MyModule" --engines "FreeSql,Redis"
| 选项 | 必填 | 说明 |
|---|---|---|
-t / --title | 否 | 标题文本 |
-e / --engines | 否 | 引擎名称列表,逗号分隔 |
代码脚手架(CodeScaffolding)
核心模块 CodeScaffolding 基于 Scriban 模板引擎实现代码生成:
工作原理
- 指定模板目录(
templatePath)和输出目录(outputDir) - 递归遍历模板目录中所有文件
- 使用 Scriban 解析文件内容(模板变量注入)
- 文件名和内容都支持
{Property}模板语法 - 输出到目标目录
模板文件命名
模板文件默认后缀为 .txt(由 PostFix 属性控制),输出时会去除此后缀:
Templates/
├── {Name}.cs.txt → 输出为 {Name}.cs
├── I{Name}Service.cs.txt → 输出为 I{Name}Service.cs
└── {Name}Controller.cs.txt → 输出为 {Name}Controller.cs
使用示例
var scaffolding = new CodeScaffolding(
templatePath: "./Templates",
outputDir: "../../../Output"
);
await scaffolding.GenerateAsync(new
{
Name = "User",
EntityName = "User",
ModuleName = "Identity"
});
模板文件 {Name}.cs.txt:
namespace FreeKit.{ModuleName};
public class {Name}
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
}
生成结果 User.cs:
namespace FreeKit.Identity;
public class User
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
}
扩展命令
CLI 基于 System.CommandLine,可轻松扩展新命令:
public class MyCommand : Command
{
public MyCommand() : base("mycommand", "命令描述")
{
var option = new Option<string>("--name", "参数说明");
AddOption(option);
this.SetHandler(async (name, silent) =>
{
// 命令逻辑
}, option, GlobalOptions.SilentOption);
}
}
// 注册到根命令
root.AddCommand(new MyCommand());
配置
appsettings.json:
{
"AppOption": {
"TemplatesPath": "./Templates",
"OutputDirectory": "../../../Output"
}
}