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



我使用MSBuild版本14.0。

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

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

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

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

msbuild-MyProject.csproj/t:Build/p:Platform="AnyCPU"/fileLogger/flp:logfile=Output.log;冗长:最小

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

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

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

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

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

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

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

最新更新