2017-06-14 62 views
0

我剛開始使用MSBuild,無論出於何種原因,這似乎比應該更復雜。我試圖讓構建過程完全忽略「node_modules」文件夾。我嘗試了各種方法。這是我最新的:我無法讓MSBuild忽略整個文件夾

<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

應該工作,它取決於node_modules文件夾和.csproj的結構級別。我用你的代碼對它進行了測試,它適用於我。在使用最新配置進行測試之前,您是否清除目標文件夾中的文件? VS重建項目時不會自動清除它。如果您已經清除它,請在解決方案資源管理器中分享我的結構級別? –

+0

很難說出確切的問題,因爲您沒有顯示您的目錄結構...排除需要精確的路徑匹配,請參閱https://msdn.microsoft.com/en-us/library/ms171455.aspx?f=255&MSPPError=-2147217396。否則,使用'Condition ='%(RelativeDir)'!='node_modules'「'這樣的條件 – stijn

回答

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的一部分)可能需要獲得完整的性能優勢。