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

标签 .net build msbuild build-process msbuild-4.0

我有一个 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/

相关文章:

c# - 如何将构建属性传递给 dotnet?

java - Android Java 构建错误

ios - 编译Tux Rider

msbuild - C++通用应用程序在解决方案中时NuGet恢复.vcxitems错误

msbuild - Visual Studio 预构建事件检查目录(和文件)是否存在,如果存在则将其删除

c# - 数据包嗅探器套接字异常

c# - 在 .net 4 中第二次尝试反射时获取 ReflectionTypeLoadException

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

c++ - 在 Visual Studio 中引用静态库项目

.net - 在 MSMQ 中发送二进制消息