编写包含多个 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的项目层级的更多相关文章

  1. IOS整体项目层级构建

    在创建IOS项目时,若有一个比较明确的层级架构,将对于今后代码的维护或者功能的扩展很有帮助:本文将通过一个实例来展现我对于层级的一些观点:里面有一些零碎的知识点可能无法全部介绍,到时提供源代码进行下载 ...

  2. grid - 网格项目层级

    网格项目可以具有层级和堆栈,必要时可能通过z-index属性来指定. 1.在这个例子中,item1和item2的开始行都是1,item1列的开始是1,item2列的开始是2,并且它们都跨越两列.两个网 ...

  3. eclipse中maven父子项目层级显示设置

    第一步:window-->show view --> project explorer 第二步:小三角---> projects presentation----->hiera ...

  4. 2018.2.2IDEA 项目层级问题

    这个问题也不是太大,个人爱好,老是觉着影响美观.网上找了一下:[Hide Empty Middle Packages]说是把这个打勾的去掉就可以了. 但是:我的这个好像没有. 这样点击小齿轮把第二个C ...

  5. 【Unity】2.3 项目浏览器和资源的组织

    分类:Unity.C#.VS2015 创建日期:2016-03-29 一.Project-工程浏览器 前面我们说过,Unity中的Project View(称为工程浏览器)相当于VS2015中的解决方 ...

  6. [原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明

    由于所创建的应用项目或类库项目较多,于是将这些类库放到一个文件夹下.在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系.如下图所示: 但打开“我的电脑”,看到的只有类库,并未看到维护层次关 ...

  7. asp.net core react 项目实战(一)

    asp.net-core-react asp.net core react 简介 开发依赖环境 .NET Core SDK (reflecting any global.json): Version: ...

  8. .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目

    系列目录     [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...

  9. asp.net core web 解决方案多项目模板制作打包总结

    一.文件夹\项目结构 1.1.文件夹 net6.0:针对.net 6.0 项目模板 net6.0pack:针对net6.0打包 1.2.项目结构 Web\WebApi多项目.各层项目.单元测试项目 目 ...

  10. iOS基于MVC的项目重构总结

    关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你认为的MVC的问题,一定是你自己理解的问题(资深架构师请自动忽略本文). 行 ...

随机推荐

  1. 揭秘!尤雨溪成立的VoidZero如何改变前端世界

    前言 Vue和Vite之父尤雨溪宣布成立公司 VoidZero,目前已经融资3200万.这篇文章欧阳将带你了解VoidZero是如何改变javascript的世界! 关注公众号:[前端欧阳],给自己一 ...

  2. iOS中RunLoop和线程的关系

    RunLoop又叫运行循环,主要用来管理线程.一个线程对应一个RunLoop,一个RunLoop又有五种模式.只有主线程的RunLoop是默认开启的,所以程序在开启后,会一直运行,不会退出.其他线程的 ...

  3. ADO.NET组成

    SqlConnection(数据库连接器) SqlCommand(数据库命名对象) SqlCommandBuilder(生存SQL命令) SqlDataReader(数据读取器) SqlDataAda ...

  4. filter 加 indexOf 方法去重数组

    let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6] let unique = (arr) => { console.log(arr) return arr.f ...

  5. spring boot 官网提供所有组件

    所有资源来自于官网:https://start.spring.io/,在此整理只是为了方便查看 Developer Tools Spring Boot DevToolsProvides fast ap ...

  6. Linux命令netstat查看端口使用方法

    [redis@fgedu180 ~]$ netstat -an|grep 6379 tcp 0 0 192.168.4.180:6379 0.0.0.0:* LISTEN

  7. Next.js 实战开发入门 1 开发环境部署 - 曲速引擎 Warp Drive

    开发目标 我们将构建一个简化版本的财务仪表板,其内容包括:公共主页.登录页面.受身份验证保护的仪表板页面.用户可以添加.编辑和删除发票 开发环境配置 开发客户端 Windows 10 (不限系统,兼容 ...

  8. Hadoop未授权访问

    Hadoop未授权访问 是什么? Hadoop 是一种用来处理和存储大量数据的软件工具,可以用来日志分析,推荐系统,数据备份   核心组件: 存储大数据:HDFS 文件系统 处理大数据:MapRedu ...

  9. Python3开启简易服务器

    nohup python3 -m http.server 3000 2>&1 &

  10. g++ error unrecognized command-line option ‘-std=c++23’; did you mean ‘-std=c++03’?

    编译一个C++的项目代码,报错: g++: error: unrecognized command-line option '-std=c++23'; did you mean '-std=c++03 ...