MsBuild如何匹配项的Exclude属性中的通配符?

MsBuild如何匹配项的Exclude属性中的通配符?,msbuild,Msbuild,对于项集合中的项,带有通配符的Exclude属性的确切行为是什么?在某些情况下,它的工作原理与我预期的一样,而在其他情况下,它无法排除明显匹配的文件 假设我有一个src/子目录,它自己包含几个子目录。让我们称它们为src/base和src/util(实际上有很多,20+)。我的目的是编译src/的选定子目录中的所有文件,但以-test.cc结尾的文件除外。假设存在一个文件src/base/io test.cpp,而不丧失一般性 在以下两种情况下,Include和Exclude属性上的路径(san

对于项集合中的项,带有通配符的Exclude属性的确切行为是什么?在某些情况下,它的工作原理与我预期的一样,而在其他情况下,它无法排除明显匹配的文件

假设我有一个
src/
子目录,它自己包含几个子目录。让我们称它们为
src/base
src/util
(实际上有很多,20+)。我的目的是编译
src/
的选定子目录中的所有文件,但以
-test.cc
结尾的文件除外。假设存在一个文件
src/base/io test.cpp
,而不丧失一般性

在以下两种情况下,
Include
Exclude
属性上的路径(sans filename)是相同的,并且文件
src/base/io test.cpp
按预期被排除:第一种按预期仅包括来自
src/base
的非测试文件

<ItemGroup>
  <ClCompile Include="src/base/*.cc" Exclude="src/base/*-test.cc" />
</ItemGroup>
但以下内容并不排除似乎与排除模式匹配的文件:

<ItemGroup>
  <ClCompile Include="src/base/*.cc" Exclude="src/*/*-test.cc" />
</ItemGroup>

我希望排除
src/base/io test.cpp
文件,因为它的名称显然与模式匹配(在第二种情况下,实际上由in排除),但该文件包含在集合中

严格的阅读甚至可能表明它根本不支持通配符,但我不认为是这样


由于我的意图是包含一些列出的目录中的文件(类似于
include=“src/base/*.cc;src/util/*.cc”
),但不包括所有测试文件,最后一个定义是我正在尝试使用的定义。

我在VS2015中尝试了这一点,它似乎工作正常。请共享您正在尝试的完整测试项目文件,好吗?顺便说一句,请记住,排除仅适用于与排除相同的item元素中由相应的Include添加的项。@激进:有趣。我将制作一个简短的版本。当然,不能共享2K文件。
<ItemGroup>
  <ClCompile Include="src/base/*.cc" Exclude="src/*/*-test.cc" />
</ItemGroup>