2013-05-06 50 views
3

是否有方法遍歷訪問特定<PropertyGroup>中每個屬性的名稱和值的MSBuild文件的屬性?也許這樣的事情:MSBuild迭代來自已標記PropertyGroup的屬性並檢索名稱和值

<Project ToolsVersion="4.0" DefaultTargets="test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <PropertyGroup Label="testPropertyGroup"> 
    <Property1>Value1</Property1> 
    <Property2>Value2</Property2> 
    </PropertyGroup> 

    <Target Name="prop"> 
    <Message Text="Name=%(testPropertyGroup.Name)"/> 
    <Message Text="Value=%(testPropertyGroup.Value)"/> 
    </Target> 

</Project> 
+0

的arent你只是想就像你使用的ItemGroup使用屬性? – 2013-05-07 08:46:20

+0

也許?我可以使用一個項目組來實現嗎? – 2013-05-09 15:58:44

回答

1

如果您使用的ItemGroup幾個子節點,它的工作原理:

<ItemGroup> 
    <ApplicationLanguages Include="zh-chs"> 
    <Name>Chinese.Simplified</Name> 
    <IsAppLanguage>true</IsAppLanguage> 
    </ApplicationLanguages> 
    <ApplicationLanguages Include="zh-cht"> 
    <Name>Chinese.Traditional</Name> 
    <IsAppLanguage>false</IsAppLanguage> 
    </ApplicationLanguages> 
    <ApplicationLanguages Include="fr"> 
    <Name>French</Name> 
    <IsAppLanguage>true</IsAppLanguage> 
    </ApplicationLanguages> 
    <ApplicationLanguages Include="de"> 
    <Name>German</Name> 
    <IsAppLanguage>true</IsAppLanguage> 
    </ApplicationLanguages> 
    <ApplicationLanguages Include="es"> 
    <Name>Spanish</Name> 
    <IsAppLanguage>true</IsAppLanguage> 
    </ApplicationLanguages> 
</ItemGroup> 
<Target Name="PrintValues" Outputs="%(ApplicationLanguages.Identity)"> 
    <Message Text="Identity: %(ApplicationLanguages.Identity)" Importance="high" /> 
    <Message Text="Name:  %(ApplicationLanguages.Name)" Importance="high" /> 
    <Message Text="IsValid: %(ApplicationLanguages.IsAppLanguage)" Importance="high" /> 
</Target> 
0

如果我正確理解你,你是在類似echoproperties的螞蟻的東西? 得到這個的唯一方法是運行你的msbuild as/verbosity:detail或/ verbosity:diagnostic,但是我發現在那個輸出中查找信息有點困難。 找到最好的方法是爲每個屬性創建一個目標和寫入消息任務(我知道一個長長的日誌),並將其作爲InitialTargets之一在項目中調用。

<Project ToolsVersion="4.0" 
     DefaultTargets="prop" 
     InitialTargets="CheckProperties" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <PropertyGroup Label="testPropertyGroup"> 
    <Property1>Value1</Property1> 
    <Property2>Value2</Property2> 
    </PropertyGroup> 


    <Target Name="CheckProperties"> 
    <Message Text="Property1: $(Property1)"/> 
    <Message Text="Property2: $(Property2)"/> 
    </Target> 

    <Target Name="prop"> 
    <Message Text="Name=%(Names.Identity)"/> 
    <!--<Message Text="Value=%(testPropertyGroup.Value)"/>--> 
    </Target> 

</Project> 
相關問題