3.2 .NET CLI 与项目系统
.NET CLI 是创建、构建、测试和发布 .NET 项目的统一入口。理解项目文件和解决方案结构,可以帮助你更快排查依赖、目标框架和发布问题。
学习目标
- 能使用
dotnet new创建项目和解决方案。 - 能读懂
.csproj中的目标框架、包引用和项目引用。 - 能使用
dotnet build、dotnet test、dotnet publish。 - 能设计适合全栈项目的基础目录结构。
应用场景
- 从零创建 Web API、类库和测试项目。
- 把业务逻辑从 API 项目拆到 Application 或 Domain 项目。
- 在 CI 中恢复依赖、构建和运行测试。
- 发布后端应用到服务器或容器镜像。
核心命令
dotnet new sln -n TodoApp
dotnet new webapi -n TodoApp.Api -o src/TodoApp.Api
dotnet new classlib -n TodoApp.Application -o src/TodoApp.Application
dotnet new xunit -n TodoApp.Tests -o tests/TodoApp.Tests
dotnet sln add src/TodoApp.Api src/TodoApp.Application tests/TodoApp.Tests
dotnet add src/TodoApp.Api reference src/TodoApp.Application
dotnet build
dotnet test
.csproj 示例
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TodoApp.Application\TodoApp.Application.csproj" />
</ItemGroup>
</Project>
推荐目录
TodoApp/
src/
TodoApp.Api/
TodoApp.Application/
TodoApp.Domain/
TodoApp.Infrastructure/
tests/
TodoApp.UnitTests/
TodoApp.IntegrationTests/
重点难点
- 目标框架要和本机 SDK、部署环境保持一致。
PackageReference是 NuGet 包依赖,ProjectReference是本仓库项目依赖。- API 项目可以依赖 Application 和 Infrastructure,但 Domain 不应依赖外层项目。
- CI 中不要依赖 IDE 行为,所有步骤都应能用 CLI 复现。
常见误区
| 误区 | 推荐做法 |
|---|---|
| 只会在 IDE 中创建项目 | 掌握 CLI,方便自动化和排障 |
| 所有代码都放在 API 项目 | 按职责拆分项目,控制依赖方向 |
| 发布时复制源码目录 | 使用 dotnet publish 生成部署产物 |
练习
- 创建一个包含 API、Application、Tests 的解决方案。
- 在 Application 中定义服务接口,并让 API 项目引用它。
- 运行
dotnet publish -c Release,观察输出目录内容。