Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
msbuild-如何删除属性中的字符串_Msbuild - Fatal编程技术网

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很有趣。。。