从MSBuild属性分析键/值对
假设我有一个类似于:从MSBuild属性分析键/值对,msbuild,Msbuild,假设我有一个类似于: <MyProp>Foo=Bar;Hello=World</MyProp> 编辑:要明确的是,属性不是我自己创建的,它是来自另一个目标的输出,超出了我的控制范围,因此我无法更改属性声明的方式。就我而言,您有两种方法要遵循 声明一个类似于以下内容的 酒吧 世界 然后使用以下方法访问您的属性 或者您可能希望采取如下方法 <ItemGroup> <MySolutionFiles Include="..\mySolution
<MyProp>Foo=Bar;Hello=World</MyProp>
编辑:要明确的是,属性不是我自己创建的,它是来自另一个目标的输出,超出了我的控制范围,因此我无法更改属性声明的方式。就我而言,您有两种方法要遵循
酒吧
世界
然后使用以下方法访问您的属性
或者您可能希望采取如下方法
<ItemGroup>
<MySolutionFiles Include="..\mySolution.sln" />
</ItemGroup>
<Target Name="PrintItems">
<Message Text="My Files: @(MySolutionFiles)" />
</Target>
您还可以拥有以下内容
如果对输入没有选择,那么一种可能的解决方案是将输入解析到数组中,然后从数组中获取输入,如下所示:
Foo=Bar;你好=世界
$(MyProp.Split(';'))
然后使用如下数组项:
拆分[0]项包含Foo=Bar,可以像上面一样拆分为两个以上的字符串。就我而言,你有两条路要走
酒吧
世界
然后使用以下方法访问您的属性
或者您可能希望采取如下方法
<ItemGroup>
<MySolutionFiles Include="..\mySolution.sln" />
</ItemGroup>
<Target Name="PrintItems">
<Message Text="My Files: @(MySolutionFiles)" />
</Target>
您还可以拥有以下内容
如果对输入没有选择,那么一种可能的解决方案是将输入解析到数组中,然后从数组中获取输入,如下所示:
Foo=Bar;你好=世界
$(MyProp.Split(';'))
然后使用如下数组项:
拆分[0]项包含Foo=Bar,可以像上面一样拆分为两个以上的字符串。就我而言,你有两条路要走
酒吧
世界
然后使用以下方法访问您的属性
或者您可能希望采取如下方法
<ItemGroup>
<MySolutionFiles Include="..\mySolution.sln" />
</ItemGroup>
<Target Name="PrintItems">
<Message Text="My Files: @(MySolutionFiles)" />
</Target>
您还可以拥有以下内容
如果对输入没有选择,那么一种可能的解决方案是将输入解析到数组中,然后从数组中获取输入,如下所示:
Foo=Bar;你好=世界
$(MyProp.Split(';'))
然后使用如下数组项:
拆分[0]项包含Foo=Bar,可以像上面一样拆分为两个以上的字符串。就我而言,你有两条路要走
酒吧
世界
然后使用以下方法访问您的属性
或者您可能希望采取如下方法
<ItemGroup>
<MySolutionFiles Include="..\mySolution.sln" />
</ItemGroup>
<Target Name="PrintItems">
<Message Text="My Files: @(MySolutionFiles)" />
</Target>
您还可以拥有以下内容
如果对输入没有选择,那么一种可能的解决方案是将输入解析到数组中,然后从数组中获取输入,如下所示:
Foo=Bar;你好=世界
$(MyProp.Split(';'))
然后使用如下数组项:
拆分[0]项包含Foo=Bar,可以像上面一样拆分为两个以上的字符串。这应该可以让您暂时保持下去。您不需要属性组,最好有默认值,以防用户不传递它们 对于您传递的每个属性,访问该属性的语法为$(PropertyName) 因此,如果你通过: msbuild.exe/p:P1=V1/p:P2=V2;P3=V3 您将使用属性名$(P1),$(P2),$(P3)
有关MsBuild属性的详细信息。您不需要属性组,最好有默认值,以防用户不传递它们 对于您传递的每个属性,访问该属性的语法为$(PropertyName) 因此,如果你通过: msbuild.exe/p:P1=V1/p:P2=V2;P3=V3 您将使用属性名$(P1),$(P2),$(P3)
有关MsBuild属性的详细信息。您不需要属性组,最好有默认值,以防用户不传递它们 对于您传递的每个属性,访问该属性的语法为$(PropertyName) 因此,如果你通过: msbuild.exe/p:P1=V1/p:P2=V2;P3=V3 您将使用属性名$(P1),$(P2),$(P3)
有关MsBuild属性的详细信息。您不需要属性组,最好有默认值,以防用户不传递它们 对于您传递的每个属性,访问该属性的语法为$(PropertyName) 因此,如果你通过: msbuild.exe/p:P1=V1/p:P2=V2;P3=V3 您将使用属性名$(P1),$(P2),$(P3) 有关MsBuild属性的详细信息。
Foo=Bar;你好=世界
Foo=Bar;你好=世界
Foo=Bar;你好=世界
Foo=Bar;你好=世界
查看我的编辑,我没有选择更改属性的声明方式。查看我的编辑,我没有选择更改属性的声明方式。查看我的编辑,我没有选择更改属性的声明方式。查看我的编辑,我没有更改属性声明方式的选择。请参阅我编辑的响应。如果找不到具体解决方案,则可以使用第三种方法。请参阅我编辑的响应。如果找不到具体解决方案,则可以使用第三种方法。请参阅我编辑的响应。Yo
<ItemGroup>
<MyProp
Include="Foo;Hello" />
</ItemGroup>
<Target Name="PrintMyItems">
<Message Text="MyProp: @(MyProp)" />
</Target>
<PropertyGroup>
<MyProp>Foo=Bar;Hello=World</MyProp>
<Split>$(MyProp.Split(';'))</Split>
</PropertyGroup>
<Target Name="DoPrint">
<Message text="$(Split[0])" />
</Target>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyProp>Foo=Bar;Hello=World</MyProp>
</PropertyGroup>
<Target Name="Foo">
<CreateItem Include="MyProp" AdditionalMetadata="$(MyProp)">
<Output TaskParameter="Include" ItemName="MyProp" />
</CreateItem>
<Message Text="Foo %(MyProp.Foo)" />
<Message Text="Hello %(MyProp.Hello)" />
</Target>
</Project>