我有一個C++項目,我需要在某些頭文件上運行自定義生成工具以生成編譯此項目時所需的代碼。一般來說,我的配置工作。我觸發一個構建,VS/MSBuild檢測輸出文件是否是最新的,並且只在必要時運行定製構建工具。MSBuild運行不同配置時不必要地運行custombuild工具
但是,如果構建與同一項目的另一個配置結合運行,則會出現問題。這兩種配置都取決於自定義構建工具的輸出文件。因此,如果按順序運行,只有一個配置應該觸發自定義構建工具運行。對於哪個配置,構建會被觸發,其次是自定義構建工具的輸出文件已經存在並且是最新的。所以不需要重新構建它們。不幸的是,這正是發生的事情。由於自定義構建工具需要相當長的時間才能運行,因此這會大大增加構建時間。 另一個有趣的方面是,一旦兩個配置都運行,我可以再次觸發它們中的任何一個,並且不調用自定義構建工具。
我會從documentation預期的是,自定義生成工具觸發:
- 如果任何指定爲輸出的文件如果文件我指定了缺少
- 定製構建工具被修改晚於指定爲的任何現有文件輸出
- 如果我指定爲的任何文件其他依賴項進行了修改,不遲於指定爲輸出
但所有這些獨立爲其構建觸發的配置現有的任何文件。
有沒有人有一個想法,爲什麼會發生這種情況?我檢查了兩種配置的自定義構建工具的設置是相同的。輸出文件生成到兩個配置的相同文件夾中。
使其重現性很容易,然後通過Microsoft Connect或MSBuild GitHub回購報告給Microsoft。 –
VS用來追蹤哪些文件是最新的,哪些不是默認進入每個配置目錄,所以儘管它們實際上位於相同的目錄中,但就輸入文件而言VS也是不同的。見[相關](http://stackoverflow.com/questions/35107313/how-does-visual-studio-know-my-project-is-up-to-date-so-it-can-skip-running-msbu /)問題/答案。你不會說什麼應該觸發自定義生成。如果您將問題添加到問題以及最小樣本中,也許有人可以提出解決方法。 – stijn
你是說文檔(https://msdn.microsoft.com/en-us/library/hefydhhy.aspx)是錯誤的?我會根據請求更新我的問題... – sigy