重建sln的项目层级
编写包含多个 csproj 的程序时,随着项目数量的持续增加,可能涉及一些文件夹的变动,手动添加项目或者变动会变得非常麻烦,这个时候,可以利用 dotnet cli 帮助我们完成。
如果从零开始,我们可以新建一个解决方案。
dotnet new sln -n todo.sln
然后添加当前目录内的所有 csproj 文件到解决方案。
$rootDir = Get-Location
$solutionFile = "$rootDir\todo.sln"
Get-ChildItem -Recurse -Filter *.csproj | ForEach-Object {
$projectFile = $_.FullName
$relativePath = $_.DirectoryName.Replace($rootDir, "").TrimStart("\")
$solutionFolder = if ($relativePath) { "\$relativePath" } else { "" }
dotnet sln $solutionFile add $projectFile --solution-folder $solutionFolder
}
这样生成的项目会保留每一个文件夹结构(解决方案文件夹),与 Visual Studio 的默认行为不同(会忽略与项目同名的解决方案文件夹创建)。
其实简单一些,直接使用这个命令就可以了:
dotnet sln todo.sln add (ls -r **/*.csproj)
这个命令等效于:
$rootDir = Get-Location
$solutionFile = "$rootDir\todo.sln"
Get-ChildItem -Recurse -Filter *.csproj | ForEach-Object {
$projectFile = $_.FullName
$parentDirectoryName = Split-Path $_.DirectoryName -Leaf
if ($_.Name -eq "$parentDirectoryName.csproj") {
if($_.DirectoryName -ne $rootDir){
$parentSolutionFolder = (Split-Path $_.DirectoryName -Parent).Replace($rootDir, "").TrimStart("\")
$solutionFolder = if ($parentSolutionFolder) { "\$parentSolutionFolder" } else { "" }
}
else{
$solutionFolder = ""
}
} else {
$relativePath = $_.DirectoryName.Replace($rootDir, "").TrimStart("\")
$solutionFolder = if ($relativePath) { "\$relativePath" } else { "" }
}
dotnet sln $solutionFile add $projectFile --solution-folder $solutionFolder
}
上面这个感觉很复杂,不过相当于给出了每一个步骤,如果后期有其他需求,可以在上面代码的基础上进行调整与改进。
重建sln的项目层级的更多相关文章
- IOS整体项目层级构建
在创建IOS项目时,若有一个比较明确的层级架构,将对于今后代码的维护或者功能的扩展很有帮助:本文将通过一个实例来展现我对于层级的一些观点:里面有一些零碎的知识点可能无法全部介绍,到时提供源代码进行下载 ...
- grid - 网格项目层级
网格项目可以具有层级和堆栈,必要时可能通过z-index属性来指定. 1.在这个例子中,item1和item2的开始行都是1,item1列的开始是1,item2列的开始是2,并且它们都跨越两列.两个网 ...
- eclipse中maven父子项目层级显示设置
第一步:window-->show view --> project explorer 第二步:小三角---> projects presentation----->hiera ...
- 2018.2.2IDEA 项目层级问题
这个问题也不是太大,个人爱好,老是觉着影响美观.网上找了一下:[Hide Empty Middle Packages]说是把这个打勾的去掉就可以了. 但是:我的这个好像没有. 这样点击小齿轮把第二个C ...
- 【Unity】2.3 项目浏览器和资源的组织
分类:Unity.C#.VS2015 创建日期:2016-03-29 一.Project-工程浏览器 前面我们说过,Unity中的Project View(称为工程浏览器)相当于VS2015中的解决方 ...
- [原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明
由于所创建的应用项目或类库项目较多,于是将这些类库放到一个文件夹下.在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系.如下图所示: 但打开“我的电脑”,看到的只有类库,并未看到维护层次关 ...
- asp.net core react 项目实战(一)
asp.net-core-react asp.net core react 简介 开发依赖环境 .NET Core SDK (reflecting any global.json): Version: ...
- .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目
系列目录 [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...
- asp.net core web 解决方案多项目模板制作打包总结
一.文件夹\项目结构 1.1.文件夹 net6.0:针对.net 6.0 项目模板 net6.0pack:针对net6.0打包 1.2.项目结构 Web\WebApi多项目.各层项目.单元测试项目 目 ...
- iOS基于MVC的项目重构总结
关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你认为的MVC的问题,一定是你自己理解的问题(资深架构师请自动忽略本文). 行 ...
随机推荐
- USB协议详解第10讲(USB描述符-报告描述符)
1.报告描述符的概念和作用 开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构. 首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送 ...
- iOS长按手势列表拖拽功能实现
项目开发中遇到拖拽功能的需求,具体要求是在编辑状态下,首页底部菜单项可以拖动位置,便于位置切换.遇到问题后的初步想法是添加拖拽手势,拖拽到某个位置,判断拖拽cell的中心点是否在另一个cell内,这样 ...
- 玩玩虚拟化-KVM
1.讲在前面(玩这个的心历路程) 最近一段时间想玩一些集群之类的东西,学习搞一下K8s,集群啥的,但是我没有多台服务器,如果购买云服务器成本太高,后来想到了买台台式机弄点虚拟机来玩,于是我就在某鱼上淘 ...
- 1. C#面试题 - Webservice和WebApi的区别
1. Webservice : 基于SOAP协议的,数据格式时XML,只支持http协议,不是开源的,只能部署在IIS上 2. Webapi 开源的,.net 平台
- KubeSphere 社区双周报| 2024.07.19-08.01
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- nvm安装使用教程
一.简介 既然你来了,那就不用解释太多,只需要知道 nvm是一款nodejs版本管理工具,通过它可以让我们切换不同版本的 nodejs. 二.下载nvm 1.在安装nvm之前,你要先确定是否安装了no ...
- 鸿蒙Flutter实战:01-搭建开发环境
鸿蒙Flutter实战:01-搭建开发环境 准备工作 1.安装 DevEco Studio NEXT IDE, 注意版本应该是 Next,当前最新的是 Beta3 2.安装Git, 如果要同时适配安卓 ...
- Redis高可用-集群部署
redis配置 Redis集群需要至少3个主节点,为保证数据的完整性每个主节点至少需要一个从节点,所以至少需要准备6个Redis服务 建议将redis注册为系统服务并设置自启动,服务注册命令为: re ...
- 顺序表(C语言)
文章目录 1.定义顺序表结构体 2.初始化顺序表 3.插入元素 3.1顺序表头插 3.2 顺序表尾插 4.删除顺序表指定元素 5.查找元素 6.输出顺序表 7.销毁顺序表 在数据结构的世界里,顺序表是 ...
- 通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
1.前言 我是一位运维工程师,用通义灵码个人版的@workspace 和 @terminal 的能力做快速了解一个工程.查找工程内的实现逻辑,以及执行指令不知道如何写,或者不清楚某个指令的意思,对比之 ...