2012-11-01 66 views
4

我試圖從另一個創建一個過濾項目組,其中過濾項目組將只包含具有指定文件擴展名的第一個組的項目。如何過濾ItemGroup?

我發現了以下錯誤:

錯誤MSB4190:在位置1到內置的元數據的「擴展」的參考在此條件下「‘%(擴展部分)’==」是不允許的。 SYS'」。

當我運行此:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     DefaultTargets="Go" 
     ToolsVersion="4.0"> 

    <ItemGroup> 
    <Files Include="X.exe"/> 
    <Files Include="Y.sys"/> 
    </ItemGroup> 

    <ItemGroup> 
    <SysFiles Include="%(Files.Identity)" Condition="'%(Extension)'=='.sys'"> 
    </SysFiles> 
    </ItemGroup> 

    <Target Name="Go"> 
    <Message Text="[email protected](SysFiles)"/> 
    </Target> 

</Project> 

首先,我不明白爲什麼元數據是不是在這個位置上是否允許?它是一些人爲的限制或未實現的部分msbuild?

其次,實現這種轉換的簡明方法是什麼?

非常感謝。

回答

4

好吧,我發現如果我在目標Go中指定ItemGroup SysFiles,它將無誤地工作。

+0

哇,掛在那裏的朋友。這不是一個微不足道的解決方案,它將以同樣的方式工作。目標只能在實際構建期間執行。如果你想過濾一個項目組來影響你的IDE的UI,那麼這是非常重要的,因爲這可以在目標/任務的外部**工作。見https://stackoverflow.com/questions/25177363/how-to-get-visual-studio-to-execute-msbuild-initialtargets-or-building-a-projec – Nuzzolilo

+0

@Nuzzolilo如果這是你需要的行爲,你可能會需要與維護msbuild的團隊一起提交一張票,因爲它看起來沒有那樣工作。 –