MSBuild排除/包含顺序

3

我有一个任务,需要根据文件扩展名选择一些文件,但希望某些文件夹不被处理。问题是似乎排除过滤器在包含过滤器之前应用,因此最终所有文件都被包含。

这是我选择文件的地方:

<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;"

在这种情况下,如果“排除”文件夹中包含任何扩展名与“包括”列表匹配的文件,则仍将在最终列表中包括它们。因此,问题是如何强制从排除的文件夹中排除所有文件。注意:编辑后,MsBuild文件中似乎还存在另一个问题导致失败,现在已按预期工作。
1个回答

2

MSDN 上可以看到,CreateItem任务已被弃用。建议使用ItemGroup,因为从.net 3.5开始,可以将其嵌入目标中。在您的情况下,如果您想确保exclude在include之后运行,可以编写:

<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会更加有用。


1
你不能在ItemGroup元素中使用Exclude属性而不使用Include属性,因此你的第一个示例甚至无法编译... - realMarkusSchmidt
谢谢!我没有仔细检查它是否可以解析,下次我会更加小心。为了避免混淆人们,我已经删除了这个例子。 - Damian Zarębski
谢谢你的回答,虽然你不必这样做。你确实帮助了我。 - Kevin Donde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接