【问题标题】:MSBuild builds target even though condition is false即使条件为假,MSBuild 也会构建目标
【发布时间】:2017-01-25 04:12:51
【问题描述】:

我有一个构建目标的 MSBuild 项目文件,即使它的条件为假

<PropertyGroup>
  <BuildDir>$(ProjectDir)build\</BuildDir>
</PropertyGroup>
<Target Name="MakeBuildDir" Condition="!Exists('($BuildDir)')">
  <MakeDir Directories="$(BuildDir)" />
</Target>

BuildDir 确实存在,并且无论如何它都会运行此任务。

来自日志文件:

15:32:17.162     1>Target "MakeBuildDir: (TargetId:3)" in project "foo.vcxproj" (target "bar" depends on it):
                   Using "MakeDir" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
                   Task "MakeDir" (TaskId:4)
                   Done executing task "MakeDir". (TaskId:4)
15:32:17.162     1>Done building target "MakeBuildDir" in project "KB.vcxproj".: (TargetId:3)
15:32:17.162     1>Target "bar: (TargetId:4)" in project "foo.vcxproj" (target "Build" depends on it):
                   Skipping target "bar" because all output files are up-to-date with respect to the input files.

这对我来说不是一个关键问题,但如果我在我的解决方案上立即构建两个版本,我希望第二个版本向我展示我的所有 11 个项目都是最新的。现在需要几秒钟,然后说 2 成功,9 是最新的。

【问题讨论】:

  • 我无法重现该问题。 make_hfile、mak_lfile 和 make_dfile 目标的详细代码是什么?你可以在 OneDrive 上分享一个简单的项目,它可以重现你的问题。
  • 谢谢@starain。在创建要共享到 OneDrive 的较小文件时,我在我的一个输出文件中发现了一个错字,因此它是一个未创建的文件名。所以现在我把问题改到上面了。

标签: visual-studio visual-studio-2010 msbuild


【解决方案1】:

对不起。如果我将目标行更改为

<Target Name="MakeBuildDir" Condition="!Exists('$(BuildDir)')">

(尽管它仍然显示为成功,而不是最新的......)

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2019-04-05
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多