.net持续集成cake篇之常见文件及路径操作
Cake常见文件和路径操作
在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法
Cake相对路径问题
做过自动化的同学可能都知道,使用相对路径时,脚本在测试时的相对路径往往和正式环境中不一样,宿主环境的路径往往最终导致明明测试好的脚本最终却出现各种路径问题.但是如果把路径写成绝对路径往往又造成脚本通用性不强,每迁移到一个新项目就需要重新修改脚本文件,对脚本的修改往往意味着导致脚本出错的风险.而Cake的相对路径机制则恰恰解决了相对路径因宿主环境而改变的问题,也就是说只要目录或者文件的相对关系是固定的,相对路径就不会出现问题.
在Cake里 相对路径都是以build.ps1文件为参照而形成的相对路径,因此只要文件和目录的结构不变,cake里的相对路径就不会有问题.
相对路径转绝对路径
可能有些操作可能不支持相对路径,这时候就要把相对路径转换成绝对路径,Cake里提供了一个MakeAbsolute方法接收一个DirectoryPath或者FilePath参数,把目录/文件的相对路径转换为绝对路径
以下示例把当前路径(build.ps1所在路径)转换成绝对路径
var path=MakeAbsolute(new DirectoryPath("./"));
注意,如果是想要把文件的相对路径转为绝对路径,则需要传入一个new Filepath("文件名")对象.
文件操作
文件重命名
文件重命名和普通通过重命名方法一样,就是把一个文件原地复制,把名字改掉,在Cake里可以通过CopyFile方法来实现
CopyFile("./bin/debug/buildDemo.pdb","./bin/debug/demo.pdb");
以上示例把buildDemo.pdb重命名为demo.pdb
拷贝文件夹
拷贝文件夹可以通过CopyDirectory指定要拷贝的文件夹和要拷贝到的目录即可.
拷贝文件夹没没有排除选项,而是完整把一个文件夹拷贝到另一个地方
把文件复制到文件夹
可以通过CopyFiles()方法把文件拷贝到一个文件夹,它接收一个IEnumerable类型选项,包含的是文件路径,我们可以通过GetFiles()方法获取所有文件,然后通过where过滤掉特定类型,最后把特定的文件复制到指定文件夹
复制文件和文件夹的方法都以copy开头,如果是想要移动文件或者文件夹,方法一般都是以
Move开头
压缩文件/解压文件
可能通过Zip方法把文件进行压缩,并且可以指定一个IEnumerable类型的FilePath集合,指定只压缩特定的文件
对应地,解压方法为
Unzip
删除文件/文件夹
有DeleteDirectory(s)和DeleteFile(s)方法
清空文件夹
CleanDirectory(s)方法
目录/文件是否存在
DirectoryExists/FileExists方法
实践中往往需要检测文件夹是否存在,如果不存在则创建,此时可以使用
EnsureDirectoryExists方法
相对路径计算
有时候我们获得到了两个文件或者目录的位置,此时如何想要获取它们之间的相对位置,可以通过DirectoryPath对象里的GetRelativePath来计算,需要注意的是计算相对路径的两个路径必须都是绝对路径,(如果是 相对路径,我们可以很容易地通过MakeAbsolute方法转为绝对路径)
.net持续集成cake篇之常见文件及路径操作的更多相关文章
- .net持续集成cake篇之cake介绍及简单示例
cake介绍 Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake没有实现,我们还可以很容易地通过扩展Cak ...
- .net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本
使用Visual Studio来开发工具 前面我们都是通过手写或者复制的方法来编写Cake文件,Cake使用的是C#语言,如果仅使用简单的文本编辑器来编写显然效率是非常低下的,本节我们讲解如何使用ca ...
- .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取
系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...
- .net持续集成sonarqube篇之 sonarqube触发webhook
系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...
- 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)
系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...
- C# 文件与路径操作
OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...
- 持续集成高级篇之Jekins参数传入与常见任务
系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...
- .net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)
系列目录 Sonarqube结合Jenkins与常见问题 我们引入sonarqube组件的最终目的是要为整个Ci环境服务的,如果不能集成于当前的Jenkins CI,那么我们做的很多关于sonarqu ...
- 持续集成高级篇之Jekins脚本参数化构建
系列目录 本系列已经很久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任 ...
随机推荐
- 相同域名下的cookie污染
问题描述 本地用同一个tomcat调试两个相同框架的不同项目,在同一个浏览器界面里切换时,A项目的登录会把B项目的登录给踢掉,翻反过来亦如此.通过查看浏览器cookie,发现两个项目的cookie完全 ...
- Linux下压缩工具gzip和归档工具tar及其实战shell应用
Linux下压缩工具gzip和归档工具tar及其实战shell应用 第一章:gzip的使用技巧 gzip [option]... file... -d: 解压缩,相当于gunzip; -# ...
- linux(02)基础shell命令
Linux(02)之shell命令 一,Linux命令行的组成结构 在我们的linux启动,登陆成功之后会显示: 这就是linux的命令行的组成结构 二,常见命令 1,Linux系统命令操作语法格式 ...
- Mybatis-Plus Bugs
Mybatis-Plus Bugs 实体类中属性和数据库字段对应异常 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'user ...
- LeetCode 120. Triangle三角形最小路径和 (C++)
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- 学习:反调试之ZwQueryInformationProcess
SetUnhandledExceptionFilter触发条件:1.当程序有异常,且没相应的处理 2.没有人进行反调试,满足这两个条件的时候,就会其中传输的参数(实则就是一个异常处理函数) 来进行处理 ...
- TCP三次握手第三次握手时ACK丢失怎么办
Server 端 第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒.6秒.12秒后重新发送SYN+ACK包,以便Cli ...
- [LeetCode] 141. Linked List Cycle 单链表中的环
Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linked lis ...
- [LeetCode] 35. Search Insert Position 搜索插入位置
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- 509道Java面试题解析:2020年最新Java面试题
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...