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

问题描述 投票:0回答:2

我有一个 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。

msbuild target csproj
2个回答
2
投票

您已经递归地定义了目标。不要将其命名为“Clean”,而将其命名为“PreBuildClean”或类似名称。

此外,您不必使用 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>

重建目标只是“清理”,然后是“构建”,所以我不确定您为什么需要这个,除非它仅适用于解决方案中的一个特定项目。


0
投票

对我来说,Mike 的回答不起作用,因为它与 codedomproviders 有冲突。 相反,我更改了 DefaultTargets,这导致了相同的目标,即在构建之前进行清理。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="ReBuild" ...>
© www.soinside.com 2019 - 2024. All rights reserved.