2013-03-17 74 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