我想找出一種方法來訪問來自上下文的項目,而不必明確聲明ItemGroup。在上下文中的參考項目
目前正在爲複製任務:「?」
<Copy SourceFiles="C:\blabla\**\*.*" DestinationFiles="%(?.RecursiveDir)" />
我可以代替使用什麼選擇上下文中的項目?
原因是,我有一個MSBuild項目文件是通過XSLT生成的,並且存在未知數量的文件夾&文件(它們中的一些遵循目標文件夾下的不同結構 - 在這種情況下,我打算使用不同的meta數據代替RecursiveDir)在輸入XML中。是否有可能在不需要聲明大量Itemgroups(或具有大量Items的Itemgroup)的情況下實現此目的?
我試過尋找這個,但是我發現的都是聲明Itemgroups的帖子。
您想要引用項目元數據,而不明確地刪除項目本身,所以我懷疑你將能夠做到這一點。 複製任務要求SourceFiles應該是ITaskItem []類型(文學 - 它需要項目集合)。 其實MSDN描述複製任務(http://msdn.microsoft.com/en-us/library/3e54c37h.aspx)有你可以遵循的確切例子,但你應該在裏面聲明itemgroup與嵌套items子句。 –
謝謝阿列克謝。但是明確的聲明正是我想要避免的。如果我錯了,請更正我的錯誤,但我的觀察是,具有大量文件(巨大文件集)的項目會使MSBuild變慢,而文件數量較少的文件集。 –
它取決於=)。在巨大的文件集=下,你指的是什麼數字)。毫無疑問,msbuild引擎會發出並評估內存中的每個項目組,並且可能是巨大的文件集可能導致更大的內存佔用。但msbuild不適合作爲您選擇的腳本語言工作(即使powershell在一個目錄中有250K +文件,Windows本身也有問題)。如果您只是需要執行副本而不訪問完整元(遞歸目錄除外) - 使用Exec任務並調用robocopy.exe - 它比其他任何工具都更好(考慮可用的開箱即用工具)。 –