msbuild-如何删除属性中的字符串
如果我有msbuild-如何删除属性中的字符串,msbuild,Msbuild,如果我有 <PropertyGroup> <Prop1>C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;</Prop1> </PropertyGroup> C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc; 如何删除包含\abc的所有条目 我希望$(Prop1)的最终值为C:\sadf\def属性没有“条目”,它只是一个字符串。您可以通过摆弄字符串拆分和/或正则表达式来删除
<PropertyGroup>
<Prop1>C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;</Prop1>
</PropertyGroup>
C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;
如何删除包含\abc
的所有条目
我希望
$(Prop1)
的最终值为C:\sadf\def
属性没有“条目”,它只是一个字符串。您可以通过摆弄字符串拆分和/或正则表达式来删除其中的某些部分。另一方面,MSBuild也有更像正确列表的项。通过他们四处走动可能更容易:
<Target Name="RemoveItemsFromProperty">
<PropertyGroup>
<Prop1>C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;</Prop1>
</PropertyGroup>
<ItemGroup>
<Items Include="$(Prop1)"/>
<FilteredItems Include="@(Items)" Condition="! $([System.String]::Copy('%(Identity)').Contains('\abc'))"/>
</ItemGroup>
<PropertyGroup>
<Prop1>@(FilteredItems)</Prop1>
</PropertyGroup>
<Message Text="$(Prop1)" />
</Target>
C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;
@(过滤数据)
编辑确定正则表达式方法更简单,尽管我不能100%确定我的模式涵盖所有情况:
<Target Name="RemoveItemsFromProperty">
<PropertyGroup>
<Prop1>C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;</Prop1>
</PropertyGroup>
<Message Text="$([System.Text.RegularExpressions.Regex]::Replace('$(Prop1)', ';[.^;]\\abc', ''))" />
</Target>
C:\asdfsa\abc;C:\sadf\def;C:\asfddsa\abc;
仅供参考,MSBuild 14.0及更高版本允许此转换:
。这是对每个项目进行批处理,并且仅在每次迭代中将@(项目)
扩展到当前项目,这里允许使用属性函数。在不进行批处理的情况下,条件将扩展为类似于“!True;False;True”
tho的内容,因此%(Items.Identity)
是必需的。哦,MSBuild很有趣。。。