即使未对目标输入进行任何更改,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
任务 运行 将按预期进行。
我使用 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
任务 运行 将按预期进行。