即使未对目标输入进行任何更改,MSBuild 也不会跳过目标

MSBuild not skipping target even though no changes were made to target inputs

我使用 MSBuild 版本 14.0。

根据文档 here,我定义了自己的 Build 任务,如下所示:

  <Target Name="Build" 
          Inputs="@(Compile)"
          Outputs="MyLibrary.dll">

          <Csc 
              Sources="@(Compile)"
              OutputAssembly="MyLibrary.dll"/>
  </Target>  

我们的想法是通过仅增量构建来减少构建时间——构建任务应该 运行 只有当 @(Compile) 列表中的任何文件(当前是项目中的所有 .cs 个文件)在创建最新版本的 MyLibrary.dll.

后进行编辑

使用 MSBuild,我 运行 以下命令:

msbuild MyProject.csproj /t:Build /p:Platform="AnyCPU" /fileLogger /flp:logfile=Output.log;verbosity:minimal

我第一次执行命令时,一切都是从头开始构建的,正如预期的那样。

然而,在随后的情况下,当我再次 运行 命令时 没有对我的任何 .cs 文件进行任何更改 ,该项目也每次都从头开始构建。

为什么 MSBuild 不直接跳过 Build 目标,即使 Inputs 参数中包含的任何文件都没有更改为 Target

它不起作用,因为我忘记从我的 .csproj 文件中删除以下行:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

因此 Microsoft.CSharp.targets 生成的 Build 任务覆盖了我定义的 Build 任务。

删除该行后,我的自定义 Build 任务 运行 将按预期进行。