还有另一种解决方法,即针对项目文件调用 MSBUILD 任务;这反过来又针对解决方案文件调用 devenv;这样做的好处是它可以更容易地集成单元测试、代码分析等思想。
这是我的 Common.Targets 中的几个目标
<Target Name="Clean">
<RemoveDir Directories="$(BuildFolder)" />
<MakeDir Directories="$(BuildFolder)" Condition="!Exists('$(BuildFolder)')" />
<MSBuild Projects="$(SolutionName).sln" Properties="ReferencePath=$(ReferencePath);Configuration=$(Configuration)" Targets="Clean" />
</Target>
<Target Name="Compile" DependsOnTargets="Version">
<MSBuild Projects="$(SolutionName).sln" Properties="ReferencePath=$(ReferencePath);Configuration=$(Configuration);OutputPath=$(OutputPath);OutDir=$(OutputPath)\;DeployDir=$(CodeDeployFolder)\;Deploy=true;BuildConstants=$(BuildConstants)" />
</Target>
然后对于 CruiseControl 任务我有
<msbuild>
<executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<workingDirectory>code</workingDirectory>
<projectFile>Mailer.proj</projectFile>
<targets>BuildAll;DistributeLibrary</targets>
<logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
这也使得在您的构建场中添加新流程变得更加容易,例如,假设您想将 StyleCop 分析引入您的项目,您不必更改 CC.NET 设置,只需引入/扩展 CodeAnalysis 目标并使其成为其中的一部分全部构建