.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模式下如何执行常见的传统构建任 ...
随机推荐
- 春秋-SQLi题
这道题挺好的 学到的知识 sprintf()构成的sql注入漏洞 题目环境今天做的时候坏了 留下这几篇博客学习 https://blog.csdn.net/nzjdsds/article/detail ...
- LNMP环境下搭建SVN服务
最近自己买了个服务器,试着在上面搭建了LNMP环境,因为以前在本地用MAMP Pro搭建过LAMP环境,所以基本上还算是轻车熟路,第一次搭建LNMP,使用的是一键安装,过程是顺利的,后来在使用过程中遇 ...
- Vue-组件模板抽离的写法
VUE的模板分离写法. 1.第一种(不常用) <script type="text/x-template" id="myCpm"> <div& ...
- vue学习指南:第十一篇(详细) - Vue的 路由 第一篇 ( router )
一.路由的配置 路由 vue-router 1. 什么是路由? 路由相当于一个配置对象 路由:就是我们通过不同的url访问不同的内容,通过angular.js 可以实现多视图的单页,现在流行的单页面 ...
- 详解Vue响应式原理
摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...
- Python 安装cx_Oracle模块
1.Python安装cx_Oracle模块需要安装Oracle,并在环境变量中添加Oracle的路径. 2.没有安装Oracle的需要下载一个oci.dll的文件,并把文件的路径添加到path中. 如 ...
- Python从零开始——迭代器与生成器
一:迭代器 二:生成器
- LearnOpenGL.PBR.IBL
概述: IBL:image based lighting,一种间接光照(indirect lighting)技术,将周围的环境存在一张环境贴图(基于现实世界或3D场景生成)里面,然后将环境贴图上的每一 ...
- 2017 ICPC网络赛(西安)--- Xor
题目连接 Problem There is a tree with n nodes. For each node, there is an integer value ai, (1≤ai≤1,000 ...
- torchline:让Pytorch使用的更加顺滑
torchline地址:https://github.com/marsggbo/torchline 相信大家平时在使用Pytorch搭建网络时,多少还是会觉得繁琐,因为我们需要搭建数据读取,模型,训练 ...