使用C#的单一仓库:面向初学者的代码组织

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

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

开始课程

使用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;                

博客

书籍推荐