英文:
VS Code tasks.json -- Tasks work individually, but not combined
问题
这让我很烦恼(发疯!)。构建/运行文件是正确的,fmt命令也是正确的。但是如果我尝试将它们合并到一个任务文件中,它就停止工作了。
这两个单独工作得很好,并且按照我想要的方式运行:
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "build",
"args": [
"build",
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
}
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "fmt",
"args": [
"fmt",
"${file}"
],
"isBuildCommand": true
}
但是合并到一个文件中,它就无法工作:
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"tasks": [
{
"taskName": "build",
"args": [
"build",
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"fmt",
"${file}"
]
}
]
}
构建时出现的错误:
无法加载包:包构建:在以下任何位置都找不到包“build”:
D:\dev\Go\src\build(来自$GOROOT)
D:\dev\Gopher\src\build(来自$GOPATH)
无法加载包:包-o:在以下任何位置都找不到包“-o”:
D:\dev\Go\src-o(来自$GOROOT)
D:\dev\Gopher\src-o(来自$GOPATH)
无法加载包:包d:/dev/Gopher/src/myproject.exe:在以下任何位置都找不到包“d:/dev/Gopher/src/myproject.exe”:
D:\dev\Go\src\d:\dev\Gopher\src\myproject.exe(来自$GOROOT)
D:\dev\Gopher\src\d:\dev\Gopher\src\myproject.exe(来自$GOPATH)
我似乎无法理解为什么一种方式可以工作,而另一种方式不行。第二种方法(合并任务)在这里有详细说明:https://stackoverflow.com/questions/30046411/define-multiple-tasks-in-vscode
答案:问题在于在已经列为任务名称的情况下将“build”或“fmt”添加为args。我不知道这就是taskname的工作方式。最终的工作产品允许用户在不担心愚蠢的Windows防火墙的情况下进行开发:
tasks.json(最终和工作感谢@not-a-golfer)
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
{
"taskName": "build",
"args": [
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"${file}"
]
}
]
}
英文:
This is driving me nuts (go nuts!). Build / run file is proper and fmt command is proper. But if I try to combine into one tasks file, it stops working.
These two work fine on their own and behave the way I want:
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "build",
"args": [
"build",
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
}
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"taskName": "fmt",
"args": [
"fmt",
"${file}"
],
"isBuildCommand": true
}
But combined into one file, it will not work:
tasks.json
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"tasks": [
{
"taskName": "build",
"args": [
"build",
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"fmt",
"${file}"
]
}
]
}
Error given on build:
can't load package: package build: cannot find package "build" in any of:
D:\dev\Go\src\build (from $GOROOT)
D:\dev\Gopher\src\build (from $GOPATH)
can't load package: package -o: cannot find package "-o" in any of:
D:\dev\Go\src\-o (from $GOROOT)
D:\dev\Gopher\src\-o (from $GOPATH)
can't load package: package d:/dev/Gopher/src/myproject.exe: cannot find package "d:/dev/Gopher/src/myproject.exe" in any of:
D:\dev\Go\src\d:\dev\Gopher\src\myproject.exe (from $GOROOT)
D:\dev\Gopher\src\d:\dev\Gopher\src\myproject.exe (from $GOPATH)
I can't seem to understand why it works one way, but not the other. The second method (for combined tasks) is outlined here: https://stackoverflow.com/questions/30046411/define-multiple-tasks-in-vscode
Answer: The problem lies with adding "build" or "fmt" as an args when it's already listed as a taskname. I did not know that's how taskname worked. Final working product which allows users to develop without worrying about stupid windows firewalls:
tasks.json (final & working thanks to @not-a-golfer)
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
{
"taskName": "build",
"args": [
"-o",
"${workspaceRoot}.exe",
"&&",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"${file}"
]
}
]
}
答案1
得分: 3
以下似乎是有效的,但似乎不能使用&&
链接运行:
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
{
"taskName": "build",
"args": [
"-x",
"-o",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"${file}"
]
}
]
}
英文:
The following seems to be working, but it appears that you can't chain the running with &&
:
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"tasks": [
{
"taskName": "build",
"args": [
"-x",
"-o",
"${workspaceRoot}.exe"
],
"isBuildCommand": true
},
{
"taskName": "fmt",
"args": [
"${file}"
]
}
]
}
答案2
得分: 0
你应该添加属性 suppressTaskName
。
解决方案中去除多余的 build
参数显然是有效的,然而,VSCode 的文档中已经涵盖了这个例子:
> 我们将 suppressTaskName
设置为 true,因为默认情况下任务名称也会传递给命令,这将导致 "echo hello Hello World"。
{
"version": "0.1.0",
"command": "echo",
"isShellCommand": true,
"args": [],
"showOutput": "always",
"echoCommand": true,
"suppressTaskName": true,
"tasks": [
{
"taskName": "hello",
"args": ["Hello World"]
},
{
"taskName": "bye",
"args": ["Good Bye"]
}
]
}
英文:
You should add the attribute suppressTaskName
.
OPs solution to remove superfluous build
parameter obviously works, however, VSCode's documentation covers this very example:
> We set suppressTaskName
to true as by default the task name is also passed to the command which would result in "echo hello Hello World".
{
"version": "0.1.0",
"command": "echo",
"isShellCommand": true,
"args": [],
"showOutput": "always",
"echoCommand": true,
"suppressTaskName": true,
"tasks": [
{
"taskName": "hello",
"args": ["Hello World"]
},
{
"taskName": "bye",
"args": ["Good Bye"]
}
]
}
答案3
得分: 0
我最喜欢的构建任务是:
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"options": {
"cwd": "${fileDirname}"
},
"tasks": [
{
"taskName": "build",
"args": [
"build",
"-x"
],
"isBuildCommand": true,
"suppressTaskName": true
}
]
}
英文:
My favorite build task is:
{
"version": "0.1.0",
"isShellCommand": true,
"showOutput": "always",
"command": "go",
"echoCommand": true ,
"options": {
"cwd": "${fileDirname}"
},
"tasks": [
{
"taskName": "build",
"args": [
"build",
"-x"
],
"isBuildCommand": true,
"suppressTaskName": true
}
]
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论