MSBuild从标记的PropertyGroup中迭代属性并检索名称和值
是否有一种方法可以迭代MSBuild文件的属性,访问特定MSBuild从标记的PropertyGroup中迭代属性并检索名称和值,msbuild,Msbuild,是否有一种方法可以迭代MSBuild文件的属性,访问特定中每个属性的名称和值?也许是这样的: <Project ToolsVersion="4.0" DefaultTargets="test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Label="testPropertyGroup"> <Property1>Value1</Pro
中每个属性的名称和值?也许是这样的:
<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>
价值1
价值2
如果我没弄错的话,你想要的是类似ant的echoproperties?
获取此信息的唯一方法是以/verbosity:detailed或/verbosity:diagnostic的形式运行msbuild,但是我发现在该输出中查找信息有点困难。
我发现最好的方法是为每个属性创建一个目标并编写消息任务(我知道这是一个漫长的过程),并在项目中将其称为初始目标之一
<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>
价值1
价值2
如果使用具有多个子节点的项目组,则它可以工作:
<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>
中文。简体
真的
中文,繁体
假的
法语
真的
德国的
真的
西班牙的
真的
难道你不想像使用项目组一样使用属性吗?也许吧?那么,我可以使用项目组来实现这一点吗?