2013-03-17 82 views
4

我正在尝试将AfterBuild任务添加到我的VC++ 2012项目中,该项目只有在输出更改时才会执行。如果我是正确的,那么在C#中,当您添加后构建事件时,您可以选择指定何时运行构建后事件。我试图添加条件,如_SourceItemsToCopyToOutputDirectory但它没有帮助,它是空的,无论我正在做一个空构建或不。我发现的唯一财产是LinkSkippedExecution但我不知道这是最好的选择。MSBuild VC2012,如何确保AfterBuild只在输出更改时运行?

感谢您的帮助

+0

的[运行只有当项目实际上是建立一个MSBuild目标(可能重复http://stackoverflow.com/questions/13972820/run-an-msbuild-target-only-if-project-is-实际构建) – stijn 2013-03-17 20:37:57

+0

感谢stijn,看起来像这个帖子是为C#项目,并可能使用不同的属性(_AssemblyTimestampBeforeCompile),我会给它一个去。 – Jefe 2013-03-17 20:41:50

+0

是啊我不知道它是一个确切的重复,但如果它不是它应该至少让你开始,因为我非常确定C++构建系统使用类似的方法记录时间戳 – stijn 2013-03-17 20:44:42

回答

2

Check out this stack overflow question and answer: 您可以创建基于输出文件的时间戳在构建之前目标的属性。

<Target Name="BeforeBuild"> 
    <PropertyGroup> 
     <MyBeforeCompileTimestamp>%(IntermediateAssembly.ModifiedTime) 
       </MyBeforeCompileTimestamp> 
    </PropertyGroup> 
    </Target> 

    <Target Name="AfterBuild"> 
    <CallTarget Condition="$(MyBeforeCompileTimestamp) != 
      %(IntermediateAssembly.ModifiedTime)" Targets="MyTarget" /> 
    </Target> 
+0

不幸的是IntermediateAssebmly.modifiedTime是空的,所以我不认为我可以使用它。 – Jefe 2013-03-19 22:21:44

+0

因此,这意味着自上次构建以来它没有发生变化。 – SoftwareCarpenter 2013-03-20 00:16:31

+0

看看Incremental bulinding。如何:逐步构建http://msdn.microsoft.com/en-us/library/ms171483.aspx – SoftwareCarpenter 2013-03-20 00:26:26