跳到主要内容

3.2 .NET CLI 与项目系统

.NET CLI 是创建、构建、测试和发布 .NET 项目的统一入口。理解项目文件和解决方案结构,可以帮助你更快排查依赖、目标框架和发布问题。

学习目标

  • 能使用 dotnet new 创建项目和解决方案。
  • 能读懂 .csproj 中的目标框架、包引用和项目引用。
  • 能使用 dotnet builddotnet testdotnet 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,观察输出目录内容。