MSBUILD里实现编译后触发自定义脚本

DotNet的项目,开发过程中对build的很常见的一个需求就是在源代码编译完毕后增加一些额外的自定义任务,比如,在二进制文件被编译出来之后做签名,本地化,或者根据debug/release属性复制到不同的地方,甚至自动跑一些测试脚本,等等等等。

如果是用Visual Studio做开发,基本上都是msbuild来写build脚本,这里简单介绍在msbuild里在编译完毕后执行其他任务的几种方式

  • 用PreBuild和PostBuild这2个事件,这个适合调用简单的脚本的需求,比如复制文件,或者调用一个外部命令,直接用这个就行了。这个可以直接在Visual Studio里设置,相对容易。
  • 重写默认的AfterBuild Target。说到Target,就要顺带提一下Task。Task和Target是msbuild里专门用来执行任务的元素,具体区别是task是msbuild里可以执行的最小单元任务,targets则是一系列的task的组合。AfterBuild target默认会在编译完毕后触发,我们可以通过取消csproj文件里的AfterBuild Target的注释来加上我们要在编译完跑的脚本。有一点要注意的就是要保证AfterBuild Target必须出现在其他的Target import之后。
  • 用AfterTargets属性,这个是msbuild 4以上的版本才支持的。比如<Target Name=”Optimize” AfterTargets=”Compile”> </Target> 则定义了Optimize这个target依赖于Compile,必须等到Compile结束后才跑。
  • 扩展BuildDependsOn列表,这个是最高级也是最灵活的用法。如果你需要跑一堆复杂的脚本,并且它们之间还有依赖关系,那用这个就最合适了。

Comments

148 responses to “MSBUILD里实现编译后触发自定义脚本”

Leave a Reply