我刚刚开始使用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是一个令人困惑的噩梦。
答案 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测试过它,它与隐藏文件夹一起使用。