Msbuild ItemGroup 排除不适用于通配符
Msbuild ItemGroup exclude doesn't work with wildcards
此项目组 ItemsFromAnotherTarget
包含:
..\..\References\AnotherFolder\ReferencedAssembly.dll
bin\GeneratedAssembly1.dll
bin\GeneratedAssembly2.dll
somefolder\somefile.txt
somefolder\somefile.exe
bin\anexe.exe
想法是生成另一个项目组 BinaryFiles
包含
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>
这样就生成了所需的项目组。但是如果我们把Exclude
换成通配符,就不行了。
Exclude="..\..\**\References\**"
Exclude="..\..\References\**\*.dll"
Exclude="..\..\References\**\*"
None of these work.
问题是 References
文件夹可能有多个文件夹和 dll,我们需要排除整个 References
文件夹。知道如何使用通配符进行过滤吗?
我可以排除 References
文件夹的唯一方法是使用正则表达式。看起来有点老套,欢迎任何其他建议。
<ItemGroup>
<BinaryFiles Include="@(ItemsFromAnotherTarget)" Condition="(!$([System.Text.RegularExpressions.Regex]::IsMatch('%(Identity)', `.\References\.`))) and ('%(Extension)'=='.dll' or '%(Extension)'=='.exe')" />
</ItemGroup>
此项目组 ItemsFromAnotherTarget
包含:
..\..\References\AnotherFolder\ReferencedAssembly.dll
bin\GeneratedAssembly1.dll
bin\GeneratedAssembly2.dll
somefolder\somefile.txt
somefolder\somefile.exe
bin\anexe.exe
想法是生成另一个项目组 BinaryFiles
包含
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>
这样就生成了所需的项目组。但是如果我们把Exclude
换成通配符,就不行了。
Exclude="..\..\**\References\**"
Exclude="..\..\References\**\*.dll"
Exclude="..\..\References\**\*"
None of these work.
问题是 References
文件夹可能有多个文件夹和 dll,我们需要排除整个 References
文件夹。知道如何使用通配符进行过滤吗?
我可以排除 References
文件夹的唯一方法是使用正则表达式。看起来有点老套,欢迎任何其他建议。
<ItemGroup>
<BinaryFiles Include="@(ItemsFromAnotherTarget)" Condition="(!$([System.Text.RegularExpressions.Regex]::IsMatch('%(Identity)', `.\References\.`))) and ('%(Extension)'=='.dll' or '%(Extension)'=='.exe')" />
</ItemGroup>