使用C#的单一代码库:.NET项目的代码组织

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用 C# 的单一仓库:代码组织与最佳实践



在现代 C# (.NET) 开发中,单一仓库(monorepo)方法越来越常用。与每个项目都拥有自己 Git 仓库的多仓库不同,单一仓库将公司或产品的所有代码存储在一个中央存储库中。对于 .NET 开发者来说,这意味着统一的解决方案(solution)、共享库以及简化的 CI/CD 配置。在本文中,我们将分析如何正确组织使用 C# 的单一仓库,提供代码示例,并讨论其关键优势。



1. 单一仓库对 .NET 的优势



单一仓库对于处理多个相关 .NET 项目(如微服务、Web 应用程序、类库)的团队特别有用。主要优点包括:

  • 统一的依赖版本 — 所有项目使用相同版本的 NuGet 包,从而消除冲突。
  • 简化的重构 — 对公共接口或数据模型的更改会立即应用于所有消费者。
  • 共享的 Git 历史 — 影响多个项目的原子提交可以在一个地方看到。
  • 集中式 CI/CD — 用于构建、测试和部署所有组件的单一 pipeline。


对于 C#,单一仓库是围绕一个单一的 .sln 文件(解决方案)构建的,该文件引用所有项目。这允许使用 Visual Studio 和 .NET CLI 的内置工具来管理依赖关系。



2. C# 单一仓库的结构



让我们考虑一个典型的 .NET 解决方案的单一仓库结构。它可能看起来像这样:



MyCompany/├── src/│   ├── MyCompany.Common/          # 公共库│   │   ├── MyCompany.Common.csproj│   │   └── ...│   ├── MyCompany.WebApi/          # Web API│   │   ├── MyCompany.WebApi.csproj│   │   └── ...│   └── MyCompany.BackgroundJob/   # 后台服务│       ├── MyCompany.BackgroundJob.csproj│       └── ...├── tests/│   ├── MyCompany.Common.Tests/│   ├── MyCompany.WebApi.Tests/│   └── MyCompany.BackgroundJob.Tests/├── docs/                         # 文档├── scripts/                      # CI/CD 脚本├── .gitignore└── MyCompany.sln                 # 统一解决方案


此结构的关键元素:

  • src/ — 源代码文件夹。每个项目都是一个单独的文件夹,包含其自己的 .csproj 文件。
  • tests/ — 测试文件夹。测试项目的名称与主项目名称相同,并带有 .Tests 后缀。
  • docs/ — 文档(README、架构决策)。
  • scripts/ — 用于自动化构建或部署的脚本。
  • MyCompany.sln — 包含所有项目的统一解决方案文件。


这种结构简化了导航,并允许在不更改根配置的情况下轻松添加新项目。



3. 设置统一解决方案和共享依赖项



要在 .NET 中创建单一仓库,请使用 dotnet new sln 命令,然后添加项目:



# 创建根文件夹并进入mkdir MyCompany && cd MyCompany

# 创建空的解决方案文件dotnet new sln -n MyCompany

# 创建文件夹结构mkdir src tests docs scripts

# 创建项目dotnet new classlib -n MyCompany.Common -o src/MyCompany.Commondotnet new webapi -n MyCompany.WebApi -o src/MyCompany.WebApidotnet new console -n MyCompany.BackgroundJob -o src/MyCompany.BackgroundJob

# 将项目添加到解决方案dotnet sln add src/MyCompany.Common/MyCompany.Common.csprojdotnet sln add src/MyCompany.WebApi/MyCompany.WebApi.csprojdotnet sln add src/MyCompany.BackgroundJob/MyCompany.BackgroundJob.csproj


现在,让我们从 Web API 添加对公共库的引用:

博客

书籍推荐