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升级造成的. 对于第一个,重 ...
随机推荐
- 解析天气预报JSON数据
解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...
- s:iterator循环输出数字
1.在action里加上maxNum属性,GET SET方法2.第一种写法(推荐) <s:iterator value="new int[maxNum]" status=&q ...
- 由 12306.cn 谈谈高并发+高负载网站性能技术
12306.cn 网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解, 所以,如果有什么问题还请大家一起讨论 ...
- iOS开源项目:SVPullToRefresh
SVPullToRefresh也是一个下拉刷新的项目:https://github.com/samvermette/SVPullToRefresh SVPullToRefresh 允许你通过一行代码把 ...
- error: <class 'xml.parsers.expat.ExpatError'>, syntax error: line 1, column 0: file: /usr/local/lib/python2.7/xmlrpclib.py line: 557
当linux设备上开启sonar6.2时, supervisorctl status报如下错误: error: <class 'xml.parsers.expat.ExpatError'> ...
- json-lib 的maven dependency
项目中要用到json-lib,mvnrepository.com查找它的dependency时结果如下: <dependency> <groupId>net.sf.json-l ...
- 杭电OJ——1032 The 3n + 1 problem
The 3n + 1 problem Problem Description Problems in Computer Science are often classified as belongin ...
- longest-palindrome
https://leetcode.com/problems/longest-palindrome/ public class Solution { public int longestPalindro ...
- MIME简介
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器 ...
- Vc++内存布局
Vc++内存布局 测试平台 Windows server 2012 R2 and visual studio 2013 professional. 本篇文章意在介绍vc++中类的内存布局方式,只是研究 ...