我使用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
任务就按预期运行了。