C# 如何部分加载“超大”解决方案中的部分项目

简介: 在有的特有的项目环境下,团队会将所有的项目使用同一个解决方案进行管理。这种方式方面了管理,但是却会导致解决方案变得非常庞大,导致加载时间过长。那么,如何部分加载解决方案中的部分项目呢?

在有的特有的项目环境下,团队会将所有的项目使用同一个解决方案进行管理。这种方式方面了管理,但是却会导致解决方案变得非常庞大,导致加载时间过长。那么,如何部分加载解决方案中的部分项目呢?就让我们来借用微软退出的 slngen 工具来体验一下部分加载解决方案中的部分项目吧。

slngen 从根项目生成临时解决方案

SlnGen 是一个 Visual Studio 解决方案文件生成器。Visual Studio 解决方案对于大型项目树来说通常不能很好地扩展。SlnGen 读取一个给定项目的项目引用,按需创建一个 Visual Studio 解决方案。例如,你可以针对一个单元测试项目运行 SlnGen,并呈现一个包含单元测试项目及其所有项目引用的 Visual Studio 解决方案。你也可以针对一个有根的文件夹中的遍历项目运行 SlnGen,打开一个包含你的项目树的那个视图的 Visual Studio 解决方案。

安装 slngen

dotnet tool install --global Microsoft.VisualStudio.SlnGen.Tool --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources

运行以上命令,你就可以在全局安装 slngen 工具了。然后,你就可以在任何地方使用 slngen 命令了。

slngen --help

最近我们正在组织全新的技术交流方式,欢迎点击链接莅临指导 https://www.newbe.pro/links/

为所有的项目引入 Microsoft.VisualStudio.SlnGen

在你的项目树中,你需要为所有的项目引入 Microsoft.VisualStudio.SlnGen 包。可以通过 Directory.Build.props 来轻松实现。

<ItemGroup>
  <PackageReference Include="Microsoft.VisualStudio.SlnGen" Version="9.5.2" />
</ItemGroup>

准备一个临时的测试项目

为了方便演示,我们创建三个项目,分别是 slngen-demo、slngen-demo-a、slngen-demo-b。

其中,slngen-demo-a 和 slngen-demo-b 项目都引用了 slngen-demo 项目。

mkdir slngen-demo
cd slngen-demo
dotnet new classlib -o slngen-demo
dotnet new console -o slngen-demo-a
dotnet new console -o slngen-demo-b
cd slngen-demo-a
dotnet add reference ../slngen-demo/slngen-demo.csproj
cd ../slngen-demo-b
dotnet add reference ../slngen-demo/slngen-demo.csproj

文件夹结构大致如下:

C:\REPOS\SLNGEN-DEMO
│  Directory.Build.props
├─slngen-demo
│  │  Class1.cs
│  │  slngen-demo.csproj
│  │
│  ├─bin
│  └─obj
├─slngen-demo-a
│  │  Program.cs
│  │  slngen-demo-a.csproj
│  │
│  ├─bin
│  └─obj
└─slngen-demo-b
    │  Program.cs
    │  slngen-demo-b.csproj
    └─obj

使用 slngen 生成临时解决方案

注意 slngen 是通过驱动 Visual Studio 来生成解决方案的。因此需要在命令行中具备 MSBuild.exe 的路径。

因此我们需要使用 Developer Command Prompt for VS 2022 来运行 slngen 命令。

我们来使用 slngen 加载 slngen-demo-a 项目。

slngen slngen-demo-a/slngen-demo-a.csproj

通过以上命令,我们就使用 slngen 加载了 slngen-demo-a 项目。

这种方式可以加载 slngen-demo-a 项目和 slngen-demo,但是 slngen-demo-b 项目并没有被加载。

运行结果大致如下:

C:\Repos\slngen-demo>slngen slngen-demo-a/slngen-demo-a.csproj
SlnGen version 9.5.2+b19739dfbc for .NET Framework
Copyright (c) Microsoft Corporation.  Licensed under the MIT license.
Build started 2/9/2023 8:29:24 PM.
Generating solution for project "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.csproj"
Loading project references...
Loaded 2 project(s) in 840ms
Generating Visual Studio solution "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.sln" ...
Updating existing solution file and reusing Visual Studio cache
Launching Visual Studio...
Success
    0 Warning(s)
    0 Error(s)
Time Elapsed 00:00:01.33

总结

通过 slngen,我们可以很方便地加载一个项目及其所有的项目引用。这对于我们在 Visual Studio 中打开一个项目树的视图非常有用。可惜 Rider 不得行。

参考资料

感谢您的阅读,如果您觉得本文有用,请点赞、关注和转发。最近我们正在组织全新的技术交流方式,欢迎点击链接莅临指导 https://www.newbe.pro/links/


  1. https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606#directorybuildprops-example
  2. https://www.nuget.org/packages/Microsoft.VisualStudio.SlnGen.Tool
  3. https://github.com/microsoft/slngen
目录
相关文章
|
2月前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
100 1
|
9月前
|
C#
C#之四十六 迷你贪吃蛇项目
C#之四十六 迷你贪吃蛇项目
57 0
|
2月前
|
安全 算法 测试技术
C#编程实战:项目案例分析
【4月更文挑战第20天】本文以电子商务系统为例,探讨C#在实际项目中的应用。通过面向对象编程实现组件抽象和封装,确保代码的可维护性和可扩展性;利用安全性特性保护用户数据;借助数据库操作处理商品信息;通过逻辑控制和算法处理订单;调试工具加速问题解决,展现C#的优势:面向对象、数据库交互、数据安全和开发效率。C#在实际编程中展现出广泛前景。
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
104 2
|
11月前
|
开发框架 .NET C#
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
C#/.NET/.NET Core优秀项目和框架精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
177 1
|
2月前
|
运维 数据挖掘 C#
C#大型LIS检验信息系统项目源码
LIS系统能实现临床检验信息化,检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后,自动生成打印报告,通过网络存储在数据库中,使医生能够通过医生工作站方便、及时地看到患者的检验结果。
44 0
|
2月前
|
数据采集 开发框架 JavaScript
C#/.NET/.NET Core优秀项目和框架2023年12月简报
C#/.NET/.NET Core优秀项目和框架2023年12月简报
178 0
|
2月前
|
C#
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
49 0
|
2月前
|
Rust 算法 C#
C#/.NET/.NET Core优秀项目和框架2023年11月简报
C#/.NET/.NET Core优秀项目和框架2023年11月简报