これを回避する別の方法があります。それは、プロジェクトファイルに対して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ターゲットを導入/拡張して、その一部を作成します。 BuildAll