2012-04-13 39 views
2

下面是我工作的一個一個的MSBuild文件的一部分:在MSBuild中,爲什麼項目元數據在屬性中不被解析?

<ItemGroup> 
    <Tests Include="$(SolutionDir)\**\bin\$(TestPlatform)\$(Configuration)\*.Tests.dll" /> 
</ItemGroup> 

<PropertyGroup> 
    <TestProperties>/testcontainer:%(Tests.FullPath)</TestProperties> 
</PropertyGroup> 

我想有保存一個命令行開關的屬性。但是,當我嘗試在執行命令字符串中使用$(TestProperties)時,%(Tests.FullPath)永遠不會解析爲測試項目的絕對路徑。相反,它總是按字面順序處理,如"%(Tests.FullPath)"

我做錯了什麼或者這是標準嗎MSBuild行爲?如果是後者,有沒有辦法讓我解決這個問題?

謝謝

P.S. - 我意識到我可能不需要訪問FullPath屬性,因爲我的包含值是絕對路徑。但是,我仍然想了解這個問題,以及如何處理它。

回答

7

您有語法錯誤。項目列表通過@字符引用,項目元數據通過%引用。有關詳細信息,請參閱MSBuild Special Character Reference。要訪問衆所周知的項目元數據,您需要在屬性本身中應用變換。

<ItemGroup> 
    <Tests Include="MyFile.txt" /> 
</ItemGroup> 

<PropertyGroup> 
    <TestProperties>/testcontainer:@(Tests->'%(FullPath)')</TestProperties> 
</PropertyGroup> 

你可以找到更多的幫助here

+0

除了這並不工作之一:「項目列表不能與其中一個項目列表,預計其他字符串來連接在一起使用分號來分隔多個項目列表。」 – 2015-02-13 18:05:34

+0

我不知道你在說什麼。這解決了OP所要求的項目元數據。 – 2015-02-13 19:56:07

+0

它的確如此,但只能在目標內部使用。在目標之外,它會產生我發佈的錯誤。 – 2015-02-16 18:28:10

相關問題