我无法让MSBuild忽略整个文件夹

时间:2017-06-14 01:36:41

标签: visual-studio-2015 msbuild

我刚刚开始使用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是一个令人困惑的噩梦。

2 个答案:

答案 0 :(得分: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的一部分)可能需要获得全部性能优势。

答案 1 :(得分:0)

您始终可以在违规文件夹中设置隐藏属性,例如node_modules,ASPNET_compiler会跳过它。我用grunt和typescript测试过它,它与隐藏文件夹一起使用。