【问题标题】:Visual Studio not building InitialTargets or DefaultTargets if project is up to date如果项目是最新的,Visual Studio 不会构建 InitialTargets 或 DefaultTargets
【发布时间】:2019-08-06 16:50:24
【问题描述】:

我有一个依赖于一些存档文件的 CS 项目,并且我创建了 MSBuild 目标来构建它们。但是,如果项目的文件是最新的,我无法让 MSBuild 构建这些目标。

我已尝试在以下位置引用存档目标:

  • 项目的构建目标之前和之后
  • 项目的 InitialTarget 和 DefaultTarget 属性
  • 在一个单独的目标文件中,我尝试将其作为project reference 添加到我的项目中。我不确定我是否正确使用了该项目。

当我构建时,Visual Studio 告诉我我的项目是最新的并且什么都不做。如何让它将我的其他目标视为依赖项?

【问题讨论】:

  • 如果你使用<Import Project="..\xxx.targets" />的方式调用targets,如果xx.targets文件有任何变化,vs不会认为项目是最新的,但是如果你有多个targets无论项目是否是最新的,您都想执行,重建项目而不是构建可能更合适。

标签: c# visual-studio msbuild


【解决方案1】:

您似乎在 VS IDE 中构建项目。 VS IDE 有一个up-to-date 检查,如果项目的输出文件相对于其相应的输入文件是最新的,它将不会开始构建过程。

但是,如果项目的 文件是最新的。

检查this thread,如果输入源文件和输出程序集对应是最新的,VS 将不会真正构建并且不会调用您的自定义目标。

根据你的描述,无论项目文件是否是最新的,你想要的是运行你的目标,我不确定你的意思make it consider my other targets as dependencies。你真正想要的是运行自定义无论如何都是目标,如果是这样,您可以通过command-line 构建项目或尝试 rebuild 而不是 VS 中的 build 按钮。如果我有什么误解,请随时告诉我。

【讨论】:

  • VS 的行为是我所担心的,但我无法在网上找到任何地方来确认它。我不明白为什么当 MSBuild 支持 incremental builds 时 VS 会这样做。关于我关于使我的其他目标依赖项的引用,我知道如果它引用的项目已过期,VS 将构建一个项目,即使该项目的源文件没有更改。我想用我的自定义目标来完成这种行为。
  • @ChrisThomas 在 VS IDE 中调用 msbuild.exe 时,我认为在调用 msbuild 之前有一个最新的检查过程。增量构建用于确定我们是否需要跳过一个目标,当考虑到项目是最新的时,它甚至不会执行项目文件中的任何目标。也许您可以尝试在命令行中构建项目,看来您想要的行为(增量构建)可以在命令行中完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2019-04-07
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多