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

时间:2016-03-23 21:26:25

标签: msbuild

带有项目集合中项目的通配符的Exclude属性的确切行为是什么?在某些情况下,它可以像我期望的那样工作,而在其他情况下,它无法排除明显匹配的文件。

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

在以下两种情况下,IncludeExclude属性上的路径(无文件名)相同,文件src/base/io-test.cpp按预期排除:第一个,如预期的那样,包括非 - 仅来自src/base

的测试文件
<ItemGroup>
  <ClCompile Include="src/base/*.cc" Exclude="src/base/*-test.cc" />
</ItemGroup>

以及来自src/的所有子目录的第二个所有非测试文件:

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

但是以下排除看似与Exclude模式匹配的文件:

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

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

MSDN is somewhat vague on the Exclude behavior.严格的阅读甚至可能表明根本不支持通配符,但我不相信这种情况。

由于我的意图是包含几个列出的目录中的文件(类似于Include="src/base/*.cc;src/util/*.cc")但排除所有测试文件,最后一个定义是一个我正努力工作。

0 个答案:

没有答案