经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C# 如何部分加载“超大”解决方案中的部分项目
来源:cnblogs  作者:Newbe36524  时间:2023/2/10 9:18:56  对本文有异议

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

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

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

安装 slngen

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

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

  1. slngen --help

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

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

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

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

准备一个临时的测试项目

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

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

  1. mkdir slngen-demo
  2. cd slngen-demo
  3. dotnet new classlib -o slngen-demo
  4. dotnet new console -o slngen-demo-a
  5. dotnet new console -o slngen-demo-b
  6. cd slngen-demo-a
  7. dotnet add reference ../slngen-demo/slngen-demo.csproj
  8. cd ../slngen-demo-b
  9. dotnet add reference ../slngen-demo/slngen-demo.csproj

文件夹结构大致如下:

  1. C:\REPOS\SLNGEN-DEMO
  2. Directory.Build.props
  3. ├─slngen-demo
  4. Class1.cs
  5. slngen-demo.csproj
  6. ├─bin
  7. └─obj
  8. ├─slngen-demo-a
  9. Program.cs
  10. slngen-demo-a.csproj
  11. ├─bin
  12. └─obj
  13. └─slngen-demo-b
  14. Program.cs
  15. slngen-demo-b.csproj
  16. └─obj

使用 slngen 生成临时解决方案

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

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

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

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

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

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

运行结果大致如下:

  1. C:\Repos\slngen-demo>slngen slngen-demo-a/slngen-demo-a.csproj
  2. SlnGen version 9.5.2+b19739dfbc for .NET Framework
  3. Copyright (c) Microsoft Corporation. Licensed under the MIT license.
  4. Build started 2/9/2023 8:29:24 PM.
  5. Generating solution for project "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.csproj"
  6. Loading project references...
  7. Loaded 2 project(s) in 840ms
  8. Generating Visual Studio solution "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.sln" ...
  9. Updating existing solution file and reusing Visual Studio cache
  10. Launching Visual Studio...
  11. Success
  12. 0 Warning(s)
  13. 0 Error(s)
  14. 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?

原文链接:https://www.cnblogs.com/newbe36524/p/0x020-csharp-how-to-partially-load-some-items-in-a-mega-solution.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号