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 DesktopPodman

平台兼容性

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> 应替换为受支持的文化,如 pten

主要命令组:

主要命令用途
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 基础开始,其中每个生成的工件都有明确的技术功能,并且可以逐步演进。

发生了未处理的错误。 重新加载 🗙