我已经制作了一个自定义的grunt任务,它将过滤后的文件嵌入到Visual Studio C#项目文件(*.csproj
)中。
任务(vsembed)是我使用grunt开发的自定义构建系统的一部分。
问题是一个奇怪的问题,但是......
如果我执行特定目标的任务 - 成功。如果我一次运行所有目标 - 退出没有错误。
如果我运行指定目标的任务(因此它运行一次),它就会成功完成,如下所示:
C:\StoneOS>grunt vsembed:StoneOS.Modules.Pages.views --debug --verbose
Initializing
Command-line options: --debug=1, --verbose
Reading "Gruntfile.js" Gruntfile...OK
Registering Gruntfile tasks.
Reading package.json...OK
Parsing package.json...OK
Initializing config...OK
Registering "grunt_tasks" tasks.
Loading "vsembed.js" tasks...OK
+ vsembed, vsrembed
Registering "grunt-msbuild" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-msbuild\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-msbuild\package.json...OK
Loading "msbuild.js" tasks...OK
+ msbuild
Registering "grunt-contrib-compass" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-compass\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-compass\package.json...OK
Loading "compass.js" tasks...OK
+ compass
Registering "grunt-contrib-copy" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-copy\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-copy\package.json...OK
Loading "copy.js" tasks...OK
+ copy
Registering "grunt-contrib-clean" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-clean\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-clean\package.json...OK
Loading "clean.js" tasks...OK
+ clean
Loading "Gruntfile.js" tasks...OK
+ assets, default, development, embed, release, rembed
Running tasks: vsembed:StoneOS.Modules.Pages.views
Running "vsembed:StoneOS.Modules.Pages.views" (vsembed) task
[D] Task source: grunt_tasks\vsembed.js
Verifying property vsembed.StoneOS\.Modules\.Pages\.views exists in config...OK
File: [no files]
Options: project="C:\\StoneOS\\src\\StoneOS.Modules.Pages", directories=["views"], extensions=".cshtml"
Found embeddable files within filesystem: [ 'views\\websocket.cshtml', 'views\\websocket\\script.cshtml' ]
Acceptable item: <EmbeddedResource Include="views\websocket.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\websocket\script.cshtml"/>
Included 2 files.
Written 3861 bytes to: C:\StoneOS\src\StoneOS.Modules.Pages\StoneOS.Modules.Pages.csproj
Done, without errors.
如果我为整个小组运行任务,它有时完成3个,有时4个目标,有时在完成第4个中间退出。这是最新运行的输出,它停止在上面特定目标示例中显示的相同任务,这是第4个任务。
C:\StoneOS>grunt vsembed --debug --verbose
Initializing
Command-line options: --debug=1, --verbose
Reading "Gruntfile.js" Gruntfile...OK
Registering Gruntfile tasks.
Reading package.json...OK
Parsing package.json...OK
Initializing config...OK
Registering "grunt_tasks" tasks.
Loading "vsembed.js" tasks...OK
+ vsembed, vsrembed
Registering "grunt-msbuild" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-msbuild\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-msbuild\package.json...OK
Loading "msbuild.js" tasks...OK
+ msbuild
Registering "grunt-contrib-compass" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-compass\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-compass\package.json...OK
Loading "compass.js" tasks...OK
+ compass
Registering "grunt-contrib-copy" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-copy\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-copy\package.json...OK
Loading "copy.js" tasks...OK
+ copy
Registering "grunt-contrib-clean" local Npm module tasks.
Reading C:\StoneOS\node_modules\grunt-contrib-clean\package.json...OK
Parsing C:\StoneOS\node_modules\grunt-contrib-clean\package.json...OK
Loading "clean.js" tasks...OK
+ clean
Loading "Gruntfile.js" tasks...OK
+ assets, default, development, embed, release, rembed
Running tasks: vsembed
Running "vsembed" task
[D] Task source: grunt_tasks\vsembed.js
Running "vsembed:StoneOS.Modules.Authentication.views" (vsembed) task
[D] Task source: grunt_tasks\vsembed.js
Verifying property vsembed.StoneOS\.Modules\.Authentication\.views exists in config...OK
File: [no files]
Options: project="C:\\StoneOS\\src\\StoneOS.Modules.Authentication", directories=["views"], extensions=".cshtml"
Found embeddable files within filesystem: [ 'views\\login.cshtml' ]
Acceptable item: <EmbeddedResource Include="views\login.cshtml"/>
Included 1 files.
Written 4605 bytes to: C:\StoneOS\src\StoneOS.Modules.Authentication\StoneOS.Modules.Authentication.csproj
Running "vsembed:StoneOS.Modules.Installer.views" (vsembed) task
[D] Task source: grunt_tasks\vsembed.js
Verifying property vsembed.StoneOS\.Modules\.Installer\.views exists in config...OK
File: [no files]
Options: project="C:\\StoneOS\\src\\StoneOS.Modules.Installer", directories=["views"], extensions=".cshtml"
Found embeddable files within filesystem: [ 'views\\introduction.cshtml',
'views\\layouts\\installer.cshtml' ]
Acceptable item: <EmbeddedResource Include="views\introduction.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\layouts\installer.cshtml"/>
Included 2 files.
Written 3470 bytes to: C:\StoneOS\src\StoneOS.Modules.Installer\StoneOS.Modules.Installer.csproj
Running "vsembed:StoneOS.Modules.Main.views" (vsembed) task
[D] Task source: grunt_tasks\vsembed.js
Verifying property vsembed.StoneOS\.Modules\.Main\.views exists in config...OK
File: [no files]
Options: project="C:\\StoneOS\\src\\StoneOS.Modules.Main", directories=["views"], extensions=".cshtml"
Found embeddable files within filesystem: [ 'views\\test.cshtml',
'views\\layouts\\logo.cshtml',
'views\\layouts\\main.cshtml',
'views\\errors\\403.cshtml',
'views\\errors\\404.cshtml' ]
Acceptable item: <EmbeddedResource Include="views\test.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\layouts\logo.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\layouts\main.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\errors\403.cshtml"/>
Acceptable item: <EmbeddedResource Include="views\errors\404.cshtml"/>
Included 5 files.
Written 7090 bytes to: C:\StoneOS\src\StoneOS.Modules.Main\StoneOS.Modules.Main.csproj
Running "vsembed:StoneOS.Modules.Pages.views" (vsembed) task
[D] Task source: grunt_tasks\vsembed.js
Verifying property vsembed.StoneOS\.Modules\.Pages\.views exists in config...OK
File: [no files]
“强制退出”我的意思是,正如您在上面看到的那样,它以File: [no files]
结束,这是在详细模式下运行时的本机grunt功能。 始终后跟Options
,如上面这三个目标输出所示。
感觉好像是在达到超时或内存限制后发生的。
如果我删除了一些基于XML
的任务,任务将完成(但是,失去了所有目的),所以我认为问题可能在于libxmljs
。是什么让我只假设,是最后一个输出 - 即使grunt
原生输出被切断。
正在运行Windows 7 x64
,node v0.10.29
,npm 1.4.14
,grunt-cli v0.1.13
,grunt v0.4.5
。
我真的没有线索......
什么可能导致单个目标执行的问题,但是多个顺序“无声地失败”?
答案 0 :(得分:0)
非常有趣的是,开始调试这一点,我偶然发现node-memwatch。
添加一些HeapDiff
检查使我的任务运行,因此,它看起来与内存/ GC有关。
删除HeapDiff
项检查,使用global.gc();
添加手动GC清除并使用--expose-gc
运行 grunt 解决了问题。
可悲的是,但现在从一个简单的grunt vsembed
我必须在本地(而不是-g)安装 grunt 和 grunt-cli ,然后运行它node --expose-gc node_modules\grunt-cli\bin\grunt vsembed
。
好吧,无论如何,它已经解决了。