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

时间:2017-11-08 13:30:25

标签: c# visual-studio-2015 msbuild incremental-build

我使用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 =&#34; AnyCPU&#34; / fileLogger   /flp:logfile=Output.log;verbosity:minimal

我第一次执行命令时,一切都是按照预期从头开始构建的。

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

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

1 个答案:

答案 0 :(得分:0)

它无效,因为我忘记从.csproj文件中删除以下行:

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

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

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