C# “预先生成事件命令行”和“后期生成事件命令行”
概述
Visual studio 项目允许在项目属性生成事件一栏中指定预先生成和后期生成事件来实现项目生成与部署的自动化。
实例1:
我自己写了一个调试工具,该工具处于一边开发一边使用过程中。实际工作中可能时不时的我会遇到一些新的特性需求想要加到该工具类库中,每次开发到一个稳定版本我会发布到我的部署目录下。我希望我项目生成的文件自动copy到某个特定的部署目录中,因此可以通过制定以下后期生成事件实现:
if $(Configuration)==Release (
xcopy $(ProjectDir)$(OutDir)*.* C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\ /y
del C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\*.tmp
)
- if $(Configuration)==Release表示在正式发布版才执行该操作,我不希望在调试过程生成的版本也被发布到部署目录下
- (ProjectDir)$(OutDir)*.* 表示项目输出路径下生成的所有文件
- C:\SeeSharp\JXInst\SeeSharpTools\Debug\Bin\ 是我的部署路径
- XCOPY复制组文件
XCOPY与COPY命令类似,也是文件对文件的复制,只是XCOPY命令可以将子目录的文件一并复制,COPY命令只可以复制某一指定目录下的文件,无法将子目录区一并复制。另外应注意的是,XCOPY是外部命令,而COPY为内部命令;
实例2:
程序需要依赖某些配置文件,在编译生成前使用一个预先生成事件将某路径下的文件拷贝到输出路径下去
if not exist $(ProjectDir)$(OutDir)SystemSettings.ini xcopy $(ProjectDir)Resources\SystemSettings.ini $(ProjectDir)$(OutDir)
if not exist "$(ProjectDir)$(OutDir)all product\PXIe7506ProductInfo.csv" copy "$(ProjectDir)Resources\PXIe7506ProductInfo.csv" "$(ProjectDir)$(OutDir)all product\"
- 通过 if not exist 来检查文件是否存在,如果存在的话就不执行拷贝操作
- 如果路径中存在空格的话必须要把整条路径用双引号括起来,否则会导致生成失败,错误列表提示 命令“balabalabala”已退出,代码为3(也可能是代码为4);输出窗口提示系统找不到指定的路径
- 需要注意如果路径中有一些特殊符号的话会导致事件执行失败,比如某文件夹名字中带符号&,错误列表提示 命令“balabalabala”已退出,代码为255;输出窗口提示 此时不应有 &
- 尽量使用XCOPY而不是COPY,XCOPY刻意通过 /y指定在遇到文件夹不存在时直接新建一个,文件存在的情况下直接覆盖等操作
Reference
Microsoft Ref:预生成事件/生成后事件命令行对话框
Ref:C# XCOPY命令 “预先生成事件命令行”和“后期生成事件命令行”
C# “预先生成事件命令行”和“后期生成事件命令行”的更多相关文章
- VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能
原文:VS2010-使用"预先生成事件命令行"和"后期生成事件命令行"功能 xcopy /r /y $(TargetPath) $(ProjectDir)..\ ...
- C# XCOPY命令 预先生成事件命令行”和“后期生成事件命令行”
$(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) 输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值.它包括尾部 ...
- 项目属性-->生成事件-->后期生成事件命令行
以开源记牌器https://github.com/Epix37/Hearthstone-Deck-Tracker 为例,Hearthstone Deck Tracker项目中的后期生成事件命令行: i ...
- VS中的预先生成事件和后期生成事件
原文:VS中的预先生成事件和后期生成事件 在C#开发中,有时候需要在程序编译之前或之后做一些操作. 要达到这个目的,可以使用Visual Studio中的预先生成事件和后期生成事件. 下图是一个简单例 ...
- jmeter命令行运行与生成报告
一. 使用命令行方式运行Jmeter 1.1 为什么 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死. 所以正确的打开方式是在GUI模式下调 ...
- jmeter 命令行运行与生成报告
一. 使用命令行方式运行Jmeter 1.1 为什么 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死. 所以正确的打开方式是在GUI模式下调 ...
- 支持行单击、双击事件的GridView和DataList控件(译)
支持行单击.双击事件的GridView和DataList控件(译) 让GridView 和 DataList 控件响应鼠标单击.双击事件.并且,使用 ClientScript.Regi ...
- 烽火2640路由器命令行手册-12-IBM网络配置命令
IBM网络配置命令 目 录 第1章 DLSW配置命令... 1 1.1 DLSW配置命令... 1 1.1.1 dlsw local-peer 1 1.1.2 dlsw remote-peer 3 ...
- xcode命令行编译时:codesign命令,抛出“User interaction is not allowed.”异常 的处理
之前正常运行的hudson iOS编译服务器slave节点,忽然出现编译失败.发现原因有2个: 第一个原因是编译机上用来签名的用户帐号过期,第二个原因是操作系统和xCode升级造成的. 对于第一个,重 ...
随机推荐
- java 基础数据结构源码详解及数据结构算法
http://www.cnblogs.com/skywang12345/category/455711.html http://www.cnblogs.com/liqiu/p/3302607.html
- SharePoint 2013 代码创建应用程序目录(App Catalog)
众所周知,SharePoint App是2013版本的一大特色,那么,关于App的分发有几种方式呢?SharePoint给我们提供了两种方式,一种是上载到SharePoint应用商店,另一种是在本地S ...
- jquery点击回到页面顶部方法
1.代码实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- [Mac OS] Homebrew简介及安装wine
Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...
- Delphi 6 保存窗体设置
DSK Desktop Setting File 保存工程文件的桌面摆布情况, 下次打开时可以恢复上次保存的桌面状态 Desktop文件.保存了IDE的布局(也可能包含浏览记号,视乎IDE的设定),为 ...
- OpenCV学习(6) 文件和Mat之间的数据交换
有时候为了便于调试算法,我们需要从文本文件或二进制文件中读取数据,并把数据放到相应的矩阵中去.我们通常可以通过下面的函数实现. 1.从二进制文件中读取数据. 新建一个txt文 ...
- 数学图形(2.9) Capareda曲线
还是绕在球上的线圈 #http://www.mathcurve.com/courbes3d/capareda/capareda.shtml vertices = t = to (*PI) q = ra ...
- java中的char占几个字节
1:“字节”是byte,“位”是bit : 2: 1 byte = 8 bit : char 在Java中是2个字节.java采用unicode,2个字节(16位)来表示一个字符. 例子代码如下: p ...
- C++构造函数、析构函数、虚析构函数
1.构造函数 C++中的构造函数是用于初始化类的各种变量以及分配资源等.主要的注意事项是: (1)在继承关系中先初始化父类对象后初始化子类对象. (2)在一个类中按照变量的声明顺序,对类中的变量进行初 ...
- SQL Server 表,记录 死锁解决办法
我自己的数据库表记录死锁后的 根据以下资料的 解决方案: 1. 先根据以下语句 查询 哪些表被 死锁,及 死锁的 spid SELECT request_session_id spid,OBJECT ...