在.Net framework中,一个不太被大家熟知的工具就是MSBuild。这个命令行工具通过执行XML脚本可以自动生成软件工程文件。
但问题来了,“我为什么想要我的生成过程自动化?”。 其实,大部分普通的的项目都有可能包含一系列的生成过程,例如:
像这些工作,如果手动生成我们想要的一定是一个会非常耗时,容易出错的过程。并且我们一开始在创建脚本时花的时间完全可以被后来的自动化过程给抵消掉,还有如果我们采用手工的方式的话,我们会经常出错,并且做很做重复的工作。
好了,现在希望在你的心里已经有个理念就是我们可以从自动化生成中获得很多好处,那么我们现在开始我们的第一个脚本,让我们看一下我们的第一个例子,下面是一个ASP .NET MVC web site.
注意看,除了web.config文件, 还存在live.config 和 test.config 文件。现在的想法是:web.config包含所有的关于网站的配置, live.config和test.config仅仅包含那些跟部署环境相关的配置。这样能避免不同文件中的重复配置导致的头痛问题。 但是这样也给我们增加了挑战,那就是当我进行生成操作时,我们需要把部署环境相关的配置合并到web.confg中。
在开始之前,下面的列出了 构成项目生成的几个步骤
每一个工程都拥有它自己的生成过程, 但是为了更好的展示,我们的这个相当简单。
然后,让我们开始今天的教程,第一步就是添加一个新的XML文件到该网站的根目录,添加完后, 我们下一步就是清理删除bin目录, 目的是服务下一个编译过程。我们的脚本会是下面这样
1 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 <Target Name="Clean"> 3 <ItemGroup> 4 <BinFiles Include="bin\*.*" /> 5 </ItemGroup> 6 <Delete Files="@(BinFiles)" /> 7 </Target> 8 </Project>
在这有一些点需要明确的是:
好的。既然我们已经创建完了第一个target. 让我们开始执行它。 打开命令行窗口并且把路径切换到包含你的生成脚本的文件下,执行下面的语句
msbuild Build.xml /t:Clean
如果你遇到MSBuild could not be found的错误, 你需要给它指定个全路径名(我的是C:\Program Files (x86)\MSBuild\12.0\Bin), 或者是添加它的路径到Path环境变量中, 我个人比较推荐后面一种方式。
运行完这个命令,bin文件夹下应该是空的。为了让自己看到效果,最好在执行该命令之前确保bin文件夹下是有东西的。
好,让我们继续下一步:编译该工程,为了实现该功能,我们创建了一个Compile的target. 然后用MSBuild task去执行这个编译过程。
<Target Name="Compile" DependsOnTargets="Clean"> <MSBuild Projects="BuildDemoSite.csproj" /> </Target>
同样的,我们执行下面的命令,你就可以从命令提示框中看到执行的过程,然后检查一下自己的项目已经被编译完成。
msbuild Build.xml /t:Compile
好了,直到现在我们已经完成了: