磨刀不误砍柴工——VS生成事件

原文:磨刀不误砍柴工——VS生成事件

  如果说磨刀不误砍柴工,同样用好Visual Studio,会大大增加咱.NET程序猿效率。本文说的就是Visual Studio中的生成事件,在解决方案下右击某个项目然后选择 “属性” 打开窗口后即可看到 “生成事件” 选项,这个东西其实并不常用,甚至写几年代码都不会碰它一次,但是我今天需要她了。

 

2014.10.23更新:记得使用的时候有些目录可能无法写入,以管理员身份运行Visual Studio,并确认写入到的目录的权限问题。


磨刀不误砍柴工——VS生成事件_第1张图片

  我有一个解决方案IdleTest,还有另一个解决方案下的项目需用到IdleTest最新的dll,而原IdleTest下生成的dll由于还有其他项目也在用,故需要将IdleTest解决方案的几个项目生成的dll拷贝到一个新的目录。但是每次修改声称拷贝很麻烦,于是乎就想到了生成事件,百度说生成事件里的命令行是支持dos命令的,我就尝试了在后期生成事件命令行中输入 “copy [源文件全路径] 拷贝到的路径”,果然奏效。
  但是我需要将多个项目生成的dll都拷贝到新的路径下,这样一来这个“[源文件全路径]”就显得很麻烦,没有体现复用性,有木有更好的办法呢?
打开生成事件中的宏如下图所示

磨刀不误砍柴工——VS生成事件_第2张图片

磨刀不误砍柴工——VS生成事件_第3张图片
  可以看到有一个列表(含有“宏”和“值”列),而“宏”下的“TargetPath”对应的值就是当前项目生成的 dll/exe 文件对应的物理路径,双击该行,在上方的方框中就出现了“$(TargetPath)”,好了不罗嗦了。
  直接在每个项目的生成事件窗口中的“后期生成事件命令行”写下“copy $(TargetPath) E:\projects\MyDemo\JoeyLibs\IdleTest\dlls”,并在下方的 “运行后期生成事件” 选择 “成功生成时” 搞定。
磨刀不误砍柴工——VS生成事件_第4张图片

这个功能我还用来干一件事,就是当解决方案下又数十个项目时,我会在生成的最后一个项目(一般是UI或者服务)用到,操作与上文类似,只是命令变成了:

@echo msgbox "[$(ProjectName)]生成已完成!">msg.vbs @msg.vbs @del msg.vbs

 

这样在缓慢的项目生成过程中就可以1024,生成完成又可以马上继续coding。

磨刀不误砍柴工——VS生成事件_第5张图片

关于生成事件目前我只用到这两点,如果你有更好的使用场景不妨分享下。

 

========把某项目的dll复制当前项目的某目录的所有子目录中======== 

set MY_TARGET_PATH=$(TargetDir)Interface\All\
set MY_SOURCE_PATH=$(SolutionDir)\MyInterface\$(OutDir)MyInterface.dll

for /d %%i in (%MY_TARGET_PATH%*) do ( 
@echo msgbox "%%i">>msg.vbs
@msg.vbs
@del msg.vbs
 copy %MY_SOURCE_PATH% %%i
) 

 

你可能感兴趣的:(事件)