MSBuild排除/包含订单

时间:2011-07-13 13:10:08

标签: msbuild

我有一个任务,我根据扩展名选择一些文件,但是想要一些文件夹没有被处理。问题是似乎在包含过滤器之前应用了排除过滤器,所以最后包含了所有文件。

这是我选择文件的地方:

<CreateItem Exclude="**\.svn\**;
  $(MSBuildProjectDirectory)\obj\**;
  $(MSBuildProjectDirectory)\bin\**;
  $(MSBuildProjectDirectory)\My Project\*.*;
  $(MSBuildProjectDirectory)\Properties\*.*;
  $(MSBuildProjectDirectory)\Dependencies\*.*;
  $(MSBuildProjectDirectory)\Installation\**;
  $(MSBuildProjectDirectory)\Extenders\**\*.*"
Include="$(MSBuildProjectDirectory)\**\*.ascx;
  $(MSBuildProjectDirectory)\**\*.aspx;
  $(MSBuildProjectDirectory)\**\*.css;
  $(MSBuildProjectDirectory)\**\*.xml;
  $(MSBuildProjectDirectory)\**\*.xslt;
  $(MSBuildProjectDirectory)\**\*.js;
  $(MSBuildProjectDirectory)\**\*.resx;
  $(MSBuildProjectDirectory)\**\*.rpt;
  $(MSBuildProjectDirectory)\**\*.gif;
  $(MSBuildProjectDirectory)\**\*.jpg;
  $(MSBuildProjectDirectory)\**\*.png;"

&GT;

在这种情况下,如果任何“排除”文件夹包含任何扩展名与“包含”列表匹配的文件,它仍将包含在最终列表中。

所以问题是如何强制排除文件夹中的所有文件实际上都是排除的。

编辑:似乎MsBuild文件中还有另一个问题导致此操作失败。 它按预期工作。

1 个答案:

答案 0 :(得分:2)

MSDN上,您可以读到不推荐使用CreateItem任务。建议使用ItemGroup,因为.net 3.5可以将它嵌入到目标中。在您的情况下,如果您想确保在包含后运行排除,您可以写:

<ItemGroup>
  <YourItemName Include="$(MSBuildProjectDirectory)\**\*.ascx;$(MSBuildProjectDirectory)\**\*.aspx;$(MSBuildProjectDirectory)\**\*.css;$(MSBuildProjectDirectory)\**\*.xml;$(MSBuildProjectDirectory)\**\*.xslt;$(MSBuildProjectDirectory)\**\*.js;$(MSBuildProjectDirectory)\**\*.resx;$(MSBuildProjectDirectory)\**\*.rpt;$(MSBuildProjectDirectory)\**\*.gif;$(MSBuildProjectDirectory)\**\*.jpg;$(MSBuildProjectDirectory)\**\*.png;" Exclude="**\.svn\**;$(MSBuildProjectDirectory)\obj\**;$(MSBuildProjectDirectory)\bin\**;$(MSBuildProjectDirectory)\My Project\*.*;$(MSBuildProjectDirectory)\Properties\*.*;$(MSBuildProjectDirectory)\Dependencies\*.*;$(MSBuildProjectDirectory)\Installation\**;$(MSBuildProjectDirectory)\Extenders\**\*.*"/>
</ItemGroup>

我知道你已经把它整理出来,但是我发布它以防其他人遇到类似的问题。如果要在代码中包含来自多个源和许多位置的数据,则ItemGroup会更有用。