csproj中的MSBuild目标在每次构建之前都会进行清理

时间:2015-01-07 21:05:04

标签: msbuild target csproj

我有一个C#项目(vs2013),对于这个项目,我想在构建之前总是做一个干净的解决方案。现在我可以(一次又一次)在构建之前选择干净的项目,但这应该可以使用.csproj文件中的Target标记。我开始在互联网上寻找并找到了一个无效的解决方案:

<Target Name="Clean"
       BeforeTargets="Build">
  <Message Text="### Start Clean before build"
           Importance="high" />
  <Exec Command="CALL &quot;$(MSBuildBinPath)\msbuild.exe&quot; &quot;$(MSBuildProjectFullPath)&quot; /t:Clean" />
  <Message Text="### Finished Clean before build"
           Importance="high" />
</Target>

但这导致无限循环,一遍又一遍地启动msbuild。

1 个答案:

答案 0 :(得分:2)

您已经递归地定义了目标。不要将它命名为#34;清洁&#34;,将其命名为&#34; PreBuildClean&#34;或类似的东西。

此外,您不必使用Exec从外部调用msbuild。您可以使用CallTarget任务直接调用目标。

<Target Name="PreBuildClean"
   BeforeTargets="Build">
  <Message Text="### Start Clean before build"
           Importance="high" />
  <CallTarget Targets="Clean" / >
  <Message Text="### Finished Clean before build"
           Importance="high" />
</Target>

Rebuild目标只是Clean,然后是Build,所以我不确定你为什么需要这个,除非它只针对解决方案中的一个特定项目。