Lino 入门
Lino 是一个命令行工具,用于创建、演进和标准化具有明确定义架构的专业 .NET 应用程序。 它自动化重复的 scaffolding 任务,但目的不只是生成文件:Lino 引导开发人员遵循一致的技术结构,包括职责分离、明确的层、领域建模、用例、APIs、集成、事件、持久化、Web 应用程序和横切功能。 目标是在不牺牲质量、可追溯性和架构清晰度的前提下,加速真实系统的启动和演进。
先决条件
安装 Lino 之前,请检查您的环境是否已正确准备:
- ✅ 已安装 .NET 10.0 SDK 或更高版本。下载 .NET
- ✅ .NET CLI 可在终端中使用。使用以下命令检查:
dotnet --version - ✅ 已安装 Git 用于版本控制。下载 Git
- ✅ 已安装 Entity Framework Core CLI 以支持 migrations:
dotnet tool install --global dotnet-ef - ✅ 兼容 OCI 的容器环境,例如 Docker Desktop 或 Podman。
平台兼容性
Lino 是跨平台的,可用于主要操作系统:
- ✅ Windows
- ✅ macOS
- ✅ Linux
安装
Lino 作为全局 .NET 工具分发。继续之前,请确保已安装 .NET 10 SDK 或更高版本。
要安装最新版本,请运行:
dotnet tool install --global Tolitech.Lino
安装后,通过运行以下命令验证 Lino 是否正常工作:
lino --version
如果安装成功,终端会显示已安装的版本。
身份验证
安装 Lino 后,需要完成身份验证才能访问所有功能。
如果您已有账户,请使用以下命令登录:
lino auth login
系统会要求您输入:
- 用户:之前注册的电子邮件地址。
- 密码:与该账户关联的密码。
如果您还没有账户,请直接通过 CLI 注册:
lino user register
注册时请提供:
- 名字:用户的名字。
- 姓氏:用户的姓氏。
- 电子邮件:也将作为登录名使用的电子邮件地址。
- 密码:至少 6 个字符的安全密码。
- 密码确认:再次输入密码以进行验证。
注册完成后,用户将自动完成身份验证。
语言首选项
默认情况下,Lino CLI 以英语 en 显示,但您可以根据偏好在可用选项中更改语言:
en | pt | es | de | fr | it | ja | ko | ru | zh
要设置新语言,请执行以下命令:
lino preferences culture set --name <culture>
将 <culture> 替换为一种受支持的文化。例如,使用 pt 表示葡萄牙语,en 表示英语,或 es 表示西班牙语。
也可以通过交互式列表选择语言:
lino preferences culture set
UTF-8 编码调整(可选)
为了正确显示带有特殊字符的语言(例如日语、韩语、俄语或中文),请确保终端配置为使用 UTF-8 编码。
在 Windows PowerShell 中,通过执行以下命令调整编码:
[console]::InputEncoding = [System.Text.Encoding]::UTF8
[console]::OutputEncoding = [System.Text.Encoding]::UTF8
注意:在 Linux、macOS 和 Windows Terminal 中,UTF-8 支持通常是原生的。即便如此,如果字符显示出现问题,仍建议验证配置。
可用命令
Lino 将自动化能力组织为多个命令组。每个组都代表一种架构意图:创建 solution、添加服务、建模领域、公开 APIs、生成页面、配置集成、控制 migrations、对工件进行版本管理以及准备 builds。
对于您的机器,最可靠的参考是已安装 CLI 自带的帮助。使用 lino --help 查看完整的命令树,并在任意组中使用 --help 查看选项、aliases、必填参数和示例。
由于 Lino 会持续演进,不同版本之间可能会出现新的命令和选项。请将本文档视为使用指南;每当您自动化 workflow 或培训团队成员时,都应在终端中确认准确的语法。
要显示可用命令列表,可以运行根命令或显式请求帮助:
lino lino --help
lino --help lino project --help lino database migrations --help lino integration operation --help
要查看任意组的子命令和选项,请单独使用命令名称,或将其与 --help 组合使用:
lino <command> lino <command> --help
例如,在查看 project 组时,CLI 会显示组说明、常见示例以及可用的子命令:
lino project --help
说明:
管理 Lino 项目。
示例:
lino project new --name MyProject
lino project list
命令:
new 创建新项目。
list 列出已创建的项目。
delete 删除现有项目。阅读示例时,<...> 中的值表示需要替换为项目真实值的参数。例如,<ProjectName> 应替换为 solution 名称,<ServiceName> 应替换为服务名称,<culture> 应替换为受支持的文化,如 pt 或 en。
主要命令组:
| 组 | 主要命令 | 用途 |
|---|---|---|
project |
new, list, delete |
创建、列出和删除 Lino 项目。 |
service |
new, list, delete |
添加、列出和删除 backend 服务。 |
module |
new, list, delete |
在模块化服务中添加、列出和删除模块。 |
entity |
new, edit, list, delete |
创建、编辑、列出和删除领域实体。 |
shadow-entity (shadow) |
new |
创建来自其他模块或服务的数据的受控本地副本。 |
enumeration (enum) |
new, edit, list, delete |
创建、编辑、列出和删除领域枚举。 |
value-object (vo) |
new, edit, list, delete |
创建、编辑、列出和删除 Value Objects。 |
property (prop) |
delete |
删除领域实体中的属性。 |
command |
new, list |
生成写入用例,通常与状态变更、事务规则和意图验证相关。 |
query |
new, list |
生成读取用例,通常专注于查询、投影和返回数据而不改变状态。 |
api |
new, list |
为用例生成并列出 API endpoints。 |
web-app (webapp) |
new |
添加 Web 应用程序。 |
page |
new, edit, list |
生成、编辑和列出 Blazor 页面。 |
event |
new, edit, list |
创建和维护领域事件或集成事件。 |
event-handler (handler) |
new, list |
创建和列出事件 handlers。 |
error-definition (error) |
new, list |
创建标准化错误定义。 |
integration |
new, list, resource (new/list), operation (new/list), consume |
建模集成、resources、操作和消费者。 |
feature |
background-job add, auth add, tenant add |
添加横切功能,包括后台任务、身份验证和租户能力。 |
database migrations |
add, remove, list, apply, revert |
管理 Entity Framework Core migrations。 |
secret |
list, set, remove, clear |
管理项目的本地 secrets。 |
plan |
add |
注册一个由 AI 辅助的执行计划。 |
version |
show, list, bump |
查看并递增服务和 web apps 的版本。 |
build |
- | 生成工件和 container images。 |
user |
register |
注册用户以访问 Lino 的已验证功能。 |
auth |
login, logout |
管理 CLI 的本地会话,包括身份验证和退出登录。 |
preferences |
culture set |
配置 CLI 的本地首选项,例如交互式命令中显示的语言。 |
一些命令会在括号中显示短 alias 以方便使用。原始名称仍然是阅读、文档、培训、自动化和支持的主要参考。
快速开始
使用以下命令快速创建一个现代、可扩展并准备好持续演进的 .NET 应用程序:
lino project new --name <ProjectName>
将 <ProjectName> 替换为您的 solution 的真实名称。例如,要创建名为 MyApp 的项目,请执行 lino project new --name MyApp。
此命令会生成一个结构化的 .NET solution,在领域、应用、基础设施、持久化、API、编排和测试之间保持清晰分离。初始结构有助于从第一次 commit 开始就让架构决策保持可见,避免业务规则、数据访问、endpoints 和运行细节混在同一个位置。
从视觉上看,一个名为 MyApp 的初始 solution 可以理解为:
MyApp/ ├── MyApp.slnx ├── src/ │ ├── Aspire/ │ │ ├── AppHost/ │ │ │ └── MyApp.AppHost.csproj │ │ └── ServiceDefaults/ │ │ └── MyApp.ServiceDefaults.csproj │ └── Services/ │ └── Shared/ │ ├── Api/ │ │ └── MyApp.Shared.Api.csproj │ ├── Application/ │ │ └── MyApp.Shared.Application.csproj │ ├── Domain/ │ │ └── MyApp.Shared.Domain.csproj │ ├── Infrastructure/ │ │ └── MyApp.Shared.Infrastructure.csproj │ └── Infrastructure.Persistence/ │ └── MyApp.Shared.Infrastructure.Persistence.csproj └── tests/
该树是为用户项目生成结构的教学示例。它展示了 solution 如何从一开始就分离本地执行、服务、技术层和测试。
初始项目提供什么
Lino 创建的初始 solution 从一开始就按技术职责组织。CLI 不只是提供一个空项目,而是准备一个适合企业应用的基础,其中包含各层和组件。
| 区域 | 职责 |
|---|---|
| Domain | 集中实体、Value Objects、enumerations、领域事件、仓储契约以及属于业务的规则。 |
| Application | 编排 use cases、commands、queries、验证、handlers 以及应用的输入和输出契约。 |
| Infrastructure | 隔离外部细节,例如辅助服务、集成、providers、身份验证、消息传递和横切功能。 |
| Persistence | 集中 mappings、数据库上下文、migrations、具体仓储和 unit of work。 |
| Api | 向外部消费者公开 endpoints、HTTP 契约、过滤器、身份验证、授权和输入文档。 |
| 编排 | 为开发期间的组件本地执行、基础 observability 和服务之间的集成做准备。 |
| Tests | 按职责组织测试,使领域、应用、APIs 和集成能够逐步验证。 |
在 <ProjectName> 中提供的名称会成为 solution 技术身份的一部分。请选择简短、稳定且有代表性的名称,因为它将用于 namespaces、assemblies、工件、配置以及组件之间的引用。
主要优势:
- 显式架构:业务规则、use cases、基础设施、持久化和输入契约之间保持分离。
- 模块化演进:基础结构可在上下文需要时支持传统服务、模块化单体、微服务和 SaaS 应用。
- 一致的技术模式:支持 DDD、Clean Architecture、CQRS、事件、集成、migrations、测试和 observability。
- 更少的机械性工作:生成重复结构,让开发人员把精力集中在领域、规则、契约和产品决策上。
- 更可预测的代码:命名约定、文件夹组织和职责划分减少团队成员之间的歧义。
使用 Lino,开发人员不是从空文件夹或 generic template 开始,而是从面向企业系统的 opinionated 基础开始,其中每个生成的工件都有明确的技术功能,并且可以逐步演进。
