1

我使用 MSBuild 14.0 版。

按照此处的文档,我定义了自己的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参数中包含的任何文件都没有更改 to Target

4

1 回答 1

0

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

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

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

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

于 2017-11-08T13:55:27.877 回答