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/
- 本文作者: newbe36524
- 本文链接: https://www.newbe.pro/Others/0x020-csharp-how-to-partially-load-some-items-in-a-mega-solution/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606#directorybuildprops-example
https://www.nuget.org/packages/Microsoft.VisualStudio.SlnGen.Tool
https://github.com/microsoft/slngen
C# 如何部分加载“超大”解决方案中的部分项目的更多相关文章
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...
- .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- iis发布后模板字体不能加载的解决方案
在使用ace模板的过程中就曾遇到过图标不显示的情况, 1.在iis和vs运行都不能显示图标,添加缺失的字体库后可以访问 2.把项目签入到阿里云时再一次失效,解决方法是添加Mime类型 .woff a ...
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...
- iOS图片加载到内存中占用内存情况
我的测试结果: 图片占用内存 图片尺寸 .png文件大小 1MB 512*512 316KB 4MB 10 ...
- 把图片加载到BufferedImage中
把图片加载到BufferedImage 中有什么作用呢?它就可以利用 ImageIO.write(image, "JPEG", response.getOutputStream() ...
- java动态编译类文件并加载到内存中
如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...
- 动态加载JS过程中如何判断JS加载完成
在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析.这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内 ...
- 将Xml文件递归加载到TreeView中
#region [通过XDocument的方式将Xml文件递归到TreeView控件中] //读取Xml文件(XDocument) //1.加载Xml文件 XDocument document=XD ...
- 想要配置文件生效 需要通过添加到web.xml加载到内存中
想要配置文件生效 需要通过添加到web.xml加载到内存中
随机推荐
- 【网络】内网穿透方案&FRP内网穿透实战(基础版)
目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...
- 基于python的数学建模---图论模型(Dijkstra)
from collections import defaultdict from heapq import * # 堆--先进后出 inf = 99999 # 不连通值 mtx_graph = [[0 ...
- Tauri+Rust+Vue 跨平台桌面应用简明教程(1)环境创建+系统事件+自定义菜单
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 Tauri简介 Tauri 是一个工具包,可以帮 ...
- Aspose.Cells实现excel预览
在WEB项目中经常遇到excel文档在线预览的需求,基本的解决思路有以下几大类:excel文档转PDF.excel文档直接转html.后台读取excel数据返回给前端利用Excel效果的表格插件如 ...
- Mybatis-plus多数据源 + 数据库连接明文加密
核心依赖 <!--mybatis-plus 核心组件--> <dependency> <groupId>com.baomidou</groupId> & ...
- C++ 之 宏定义
宏在 C 语言中非常重要,但在 C++ 中却无甚大用,普遍的共识:尽量避免使用宏 C++ 之父 Bjarne 在<C++ Programming Language>中写到 Avoid ma ...
- 安装mySql 出现 one more product requirements have not been satisified
安装mySql 出现 one more product requirements have not been satisified 原因是缺少一些依赖环境. 在弹出的对话框中点击 否. 然后点击执行, ...
- Python-WebSpider
(一)网路爬虫入门 1.0 爬虫是个啥 通过编写程序,模拟浏览器去上网,然后让其去互联网上抓取数据的过程 1.1 爬虫分类 通用爬虫 :抓取系统重要组成部分,抓取一整张页面的数据 聚焦爬虫:建立在通用 ...
- day24 JDBC批处理(通用泛型查询方法 & 下划线转驼峰命名法)
批处理 public static Integer addBatch(String[] sqls){ init(); try { //设置关闭自动提交 conn.setAutoCommit(false ...
- DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead
// 引入mongoose模块 const mongoose = require('mongoose'); // 链接数据库 mongoose.set('useCreateIndex', true) ...