使用C#的单一仓库:面向初学者的代码组织
在现代C#(.NET)开发中,迟早会遇到一个问题:当你有多个项目——类库、Web API、控制台应用程序、测试时,如何组织代码?许多初学者开发者为每个部分创建单独的仓库,这会导致版本和依赖关系的混乱。替代方案是单一仓库(monorepo)。在本文中,我们将探讨什么是单一仓库,如何在C#中设置它,以及为什么它能简化初学者的工作。
什么是单一仓库?
单一仓库是一种方法,其中多个相关项目的所有代码都存储在一个Git仓库中。例如,你可能有一个公共库MyApp.Shared、一个Web应用程序MyApp.Web和一个控制台工具MyApp.Cli——全部放在一个文件夹中,带有一个.sln文件。
在C#(.NET)的上下文中,单一仓库通常意味着一个包含多个项目的Visual Studio解决方案。这对于以下情况特别方便:
- 共享代码(通过项目引用,而不是NuGet包)。
- 统一的构建和CI/CD流程。
- 简化版本管理(一个分支——所有更改立即可见)。
单一仓库对初学者的优势
如果你刚开始学习C#,单一仓库可以帮助你避免典型错误:
- 导航简单——所有项目都在一个地方,无需在仓库之间切换。
- 即时关联——库中的更改立即在依赖项目中可见。
- 统一风格——可以为所有项目配置一个
.editorconfig或Directory.Build.props。 - 轻松运行测试——一条命令
dotnet test即可检查整个解决方案。
创建单一仓库结构:分步指南
第1步:创建根文件夹和解决方案
打开终端并执行:
mkdir MyMonorepocd MyMonorepodotnet new sln -n MyApp现在你有了一个文件MyApp.sln——这是Visual Studio或Rider的入口点。
第2步:添加项目
我们将创建三个项目:一个类库、一个Web API和一个控制台应用程序。为了方便,将它们放在src子文件夹中:
mkdir srccd srcdotnet new classlib -n MyApp.Shareddotnet new webapi -n MyApp.Webdotnet new console -n MyApp.Clicd ..现在将它们关联到解决方案:
dotnet sln add src/MyApp.Shared/MyApp.Shared.csprojdotnet sln add src/MyApp.Web/MyApp.Web.csprojdotnet sln add src/MyApp.Cli/MyApp.Cli.csproj第3步:配置项目之间的依赖关系
假设MyApp.Web和MyApp.Cli使用MyApp.Shared中的类。与其将库发布到NuGet,不如直接添加项目引用:
dotnet add src/MyApp.Web/MyApp.Web.csproj reference src/MyApp.Shared/MyApp.Shared.csprojdotnet add src/MyApp.Cli/MyApp.Cli.csproj reference src/MyApp.Shared/MyApp.Shared.csproj现在在文件MyApp.Web.csproj中会出现一个部分:
<ItemGroup> <ProjectReference Include="..\\MyApp.Shared\\MyApp.Shared.csproj" /></ItemGroup>第4步:编写公共代码
在MyApp.Shared项目中创建一个简单的类:
// src/MyApp.Shared/GreetingService.csnamespace MyApp.Shared;
public class GreetingService{ public string GetGreeting(string name) => $"你好,{name}!欢迎来到单一仓库。";}现在在控制台应用程序中使用它:
// src/MyApp.Cli/Program.csusing MyApp.Shared;