【问题标题】:I can't get MSBuild to ignore an entire folder我无法让 MSBuild 忽略整个文件夹
【发布时间】:2023-03-17 02:14:01
【问题描述】:

我刚开始使用 MSBuild,无论出于何种原因,这似乎比应有的复杂。我试图让构建过程完全忽略“node_modules”文件夹。我已经尝试了各种方法。这是我的最新消息:

<ItemGroup>
  <DefaultExclude Include="node_modules\*.*" />
  <!-- tried **\node_modules\** -->
  <!-- tried **node_modules** -->
  <!-- tried node_modules\** -->
  <!-- tried several others combinations -->
</ItemGroup>

<ItemGroup>     
  <InstallInclude Include="**\*.ascx" Exclude="packages\**;@(DefaultExclude)" />
  <InstallInclude Include="**\*.asmx" Exclude="packages\**;@(DefaultExclude)" />
  <InstallInclude Include="**\*.css" Exclude="packages\**;@(DefaultExclude)" />
  <InstallInclude Include="**\*.html" Exclude="packages\**;@(DefaultExclude)" />      
</ItemGroup>

<Copy SourceFiles="@(InstallInclude)" DestinationFolder="$(MSBuildProjectDirectory)\ResourcesZip\%(RecursiveDir)" />
<!-- this resources directory ends up with all the node_modules in it -->

不用说,构建过程需要很长时间,有时会中断(不一致)。

MSBuild 最初是一个令人困惑的噩梦。

【问题讨论】:

  • 应该可以工作,这取决于结构级别node_modules 文件夹和 .csproj。我已经用你的代码测试了它,它对我有用。在使用最新配置进行测试之前,您是否清除了目标文件夹中的文件?重建项目时VS不会自动清除它。如果你已经搞清楚了,能否分享一下解决方案资源管理器中的结构层次?
  • 很难说出确切的问题,因为您没有显示您的目录结构...排除需要精确的路径匹配,请参见例如msdn.microsoft.com/en-us/library/…。否则使用Condition='%(RelativeDir)' != 'node_modules'"之类的条件

标签: visual-studio-2015 msbuild


【解决方案1】:

这里的问题是您正在根据您的 node_modules 文件夹扩展项目。 MSbuild 将收集所有项目的元数据,这使它变慢。为确保此过程高效,请改用属性 - 类似于 what the .net core web sdk does

<PropertyGroup>
  <DefaultItemExcludes>packages\**</DefaultItemExcludes>    
  <DefaultItemExcludes>$(DefaultItemExcludes);**\node_modules\**;node_modules\**</DefaultItemExcludes>
  <DefaultItemExcludes>$(DefaultItemExcludes);**\jspm_packages\**;jspm_packages\**</DefaultItemExcludes>
  <DefaultItemExcludes>$(DefaultItemExcludes);**\bower_components\**;bower_components\**</DefaultItemExcludes>
</PropertyGroup>

<ItemGroup>     
  <InstallInclude Include="**\*.ascx" Exclude="$(DefaultItemExcludes)" />
  <InstallInclude Include="**\*.asmx" Exclude="$(DefaultItemExcludes)" />
  <InstallInclude Include="**\*.css" Exclude="$(DefaultItemExcludes)" />
  <InstallInclude Include="**\*.html" Exclude="$(DefaultItemExcludes)" />      
</ItemGroup>

\** 结尾的排除模式将阻止 msbuild 甚至枚举文件夹。可能需要 MSBuild 15(VS 2017 的一部分)才能获得全部性能优势。

【讨论】:

    【解决方案2】:

    您始终可以在有问题的文件夹中设置隐藏属性,例如node_modules,ASPNET_compiler 将跳过它。我已经用 grunt 和 typescript 对其进行了测试,它在隐藏文件夹中运行良好。

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 2011-07-04
      • 2016-07-28
      • 2012-06-06
      • 1970-01-01
      相关资源
      最近更新 更多