This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center




10年前关闭。




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

这是我选择文件的地方:
<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 文件中还有另一个问题导致此操作失败。
它按预期工作。

最佳答案

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

<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 会更有帮助。

关于MSBuild 排除/包含顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6679425/

10-14 11:22
查看更多