gpt4 book ai didi

.net - 仅当项目实际构建时才运行 MSBuild 目标

转载 作者:行者123 更新时间:2023-12-02 17:34:23 25 4
gpt4 key购买 nike

我有一个 MSBuild 文件,用于构建 */.sln 文件(构建所有存在的 .sln 文件)。

构建使用Build目标,因此如果没有对输入文件进行任何更改,则不应再次构建项目。

我想仅当项目实际再次构建时才执行一些自定义目标。

如何做到这一点?

无论编译/构建是否实际发生,AfterBuildAfterCompile都会被调用。

最佳答案

基本上,您想要与 PostBuildEvent 相同的行为,因此我查找了 Microsoft.Common.Targets 是如何做到这一点的(此文件总是 提供了关于如何使用 msbuild 的很好的见解)。解决办法如下:

<PropertyGroup>
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="RunWhenBuild" AfterTargets="CoreBuild"
Condition="'$(_AssemblyTimestampBeforeCompile)'!='$(_AssemblyTimestampAfterCompile)'">
<Message Importance="high" Text="RunWhenBuild!!"/>
</Target>

事情是这样的:当有一个名为 RunPostBuildEvent 且值为 OnOutputUpdated 的属性时,CoreBuild 目标的依赖项最终将记录构建前后输出文件的时间戳。如果它们相等,则不会构建输出。因此,剩下的就是让您的目标在 CoreBuild 之后运行并检查这些时间戳。

关于.net - 仅当项目实际构建时才运行 MSBuild 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com