如果輸入文件的進程列表,以及相關文件相關的列表,如這個項目定義:
<ItemDefinitionGroup>
<XFiles>
<OutputFile>$(OutDir)%(RelativeDir)%(Filename).xprocessed</OutputFile>
<Dependency>%(RelativeDir)%(Filename)-SupportFile.xdep</Dependency>
</XFiles>
</ItemDefinitionGroup>
您可以在文件中指定依賴的目標將在頭輸出目標是這樣的:
<Target Name="ProcessXFilesAndDependencies"
Inputs="@(XFiles);@(XFiles->'%(Dependency)')"
Outputs="@(XFiles->'%(OutputFile)')">
<!-- process stuff -->
</Target>
這將考慮到您的版本的文件和相關文件的狀態。
如果我沒有弄錯,以這種方式設置你的目標會導致它在所有情況下被評估。由於輸入和輸出文件之間沒有1:1的關係(總是會有更少的輸出文件),MSBuild不能跳過這個目標。這會對你所有的構建造成小的開銷,但通常可以忽略不計。
好吧,但有MSbuild自動生成這樣一個基於文件內容的定義組? – Crisfole 2014-09-05 15:29:05
當然,我應該專門提出你問的問題,而不是直接深入相關細節。如果你希望它是動態的,你將不得不創建一個目標,根據文件內容自行獲取依賴項。使用DependsOnTargets將處理目標前面的依賴性採購目標鏈接起來。使用ReadLinesFromFile可能正好是門票(當然還有一些腳本)。 – d3r3kk 2014-09-05 16:16:03
我已經有自定義的任務,幫助編譯,並做了一些它自己的依賴性嗅探。我重構了一下,將它作爲一個任務公開,並使目標依賴於另一個動態生成依賴關係的目標。你讓我走下正確的軌道,謝謝。 – Crisfole 2014-09-05 16:39:50