我正在执行gulp.watch
作为.NET Core项目中预编译脚本的一部分。执行dotnet run
时,gulp.watch
调用似乎会阻止该线程,因此应用程序根本不会启动。
如何告诉gulp.watch
将句柄返回给线程?
我创建了一个最小工作示例,使用dotnet new
重现问题并通过gulp
安装npm
。
这是我的gulpfile.js
:
var gulp = require('gulp');
gulp.task('copy', () => {
gulp.src("watch_src/foo.txt")
.pipe(gulp.dest("watch_dst/"));
});
gulp.task('watch', () => {
var watcher = gulp.watch("watch_src/foo.txt", ['copy']);
watcher.on('change', function(){
console.log('foo.txt changed!');
});
});
gulp.task('default', ['watch']);
我的Program.cs
文件如下:
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
我的project.json
文件如下:
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
},
"imports": "dnxcore50"
}
},
"scripts": {
"precompile": "gulp"
}
}
执行dotnet run
将执行预编译脚本,对foo.txt
的更改将由控制台上的事件处理程序反映出来。但是应该打印Main
的{{1}}方法无法执行:
Hello World!
答案 0 :(得分:0)
ASP.NET核心中的主要方法应该看起来像 -
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
上面显示的是纯控制台应用程序,并不需要gulp。
答案 1 :(得分:0)
我正在使用vs代码,我也遇到了这个问题
在 project.json
中,您具有以下部分:
"scripts": {
"precompile": "gulp"
}
这将卡住 dotnet run
执行以下步骤如果要启动 dotnet run
和 gulp watch
第一步:在 task.json
文件中定义新任务:
{
"type": "shell",
"command": "gulp watch",
"problemMatcher": [],
"label": "gulp-watch"
}
第二步:在 launch.json
中添加新的启动配置:
{
"name": "gulp-watch",
"preLaunchTask": "gulp-watch",
"request": "launch",
"type": "node"
},
第3步:在 launch.json
中添加复合配置:
"compounds": [{
"name": ".Net+gulp",
"configurations": [
"gulp-watch",
".NET Core Launch (web)"
]
}],
有关更多详细信息,请参考此链接https://code.visualstudio.com/docs/editor/debugging