.net Msbuild ItemGroup排除不';不能使用通配符

.net Msbuild ItemGroup排除不';不能使用通配符,.net,msbuild,csproj,targets,proj,.net,Msbuild,Csproj,Targets,Proj,此项目组ItemsFromAnotherTarget包含: ..\..\References\AnotherFolder\ReferencedAssembly.dll bin\GeneratedAssembly1.dll bin\GeneratedAssembly2.dll somefolder\somefile.txt somefolder\somefile.exe bin\anexe.exe 其思想是生成另一个项目组二进制文件包含 bin\GeneratedAssembly1.dll bi

此项目组
ItemsFromAnotherTarget
包含:

..\..\References\AnotherFolder\ReferencedAssembly.dll
bin\GeneratedAssembly1.dll
bin\GeneratedAssembly2.dll
somefolder\somefile.txt
somefolder\somefile.exe
bin\anexe.exe
其思想是生成另一个项目组
二进制文件
包含

bin\GeneratedAssembly1.dll
bin\GeneratedAssembly2.dll
somefolder\somefile.exe
bin\anexe.exe
因此,我有以下几点:

<ItemGroup>
    <BinaryFiles Include="@(ItemsFromAnotherTarget)" Condition="'%(Extension)'=='.dll' or '%(Extension)'=='.exe'" Exclude="..\..\References\AnotherFolder\ReferencedAssembly.dll" />
</ItemGroup>

问题是
References
文件夹可能有多个文件夹和DLL,我们需要排除整个
References
文件夹。知道如何使用通配符进行过滤吗?

我可以排除
引用的唯一方法是使用Regex。这似乎有点骇人听闻,任何其他建议都是受欢迎的

<ItemGroup>
    <BinaryFiles Include="@(ItemsFromAnotherTarget)" Condition="(!$([System.Text.RegularExpressions.Regex]::IsMatch('%(Identity)', `.\\References\\.`))) and ('%(Extension)'=='.dll' or '%(Extension)'=='.exe')" />
</ItemGroup>


您可以在这里使用答案:并调整正则表达式,使其包含任何匹配\References\的内容。否则,您可能必须列出要排除的所有文件,即,然后根据该列表筛选BinaryFiles组。您使用的是哪个版本的msbuild?Microsoft(R)Build Engine版本15.1.1012.6693看起来静态计算和目标中的处理之间存在差异-排除模式在静态计算期间工作(“全局”)项目组),但不在TARGETS中提出GH问题:
<ItemGroup>
    <BinaryFiles Include="@(ItemsFromAnotherTarget)" Condition="(!$([System.Text.RegularExpressions.Regex]::IsMatch('%(Identity)', `.\\References\\.`))) and ('%(Extension)'=='.dll' or '%(Extension)'=='.exe')" />
</ItemGroup>