tasks.vs.json schema reference (C++)
To tell Visual Studio how to build your source code in an Open Folder project, add a tasks.vs.json file. You can define any arbitrary task here and then invoke it from the Solution Explorer context menu. CMake projects do not use this file because all the build commands are specified in CMakeLists.txt. For build systems other than CMake, tasks.vs.json is where you can specify build commands and invoke build scripts. For general information about using tasks.vs.json, see Customize build and debug tasks for "Open Folder" development.
A task has a type
property which may have one of four values: default
, launch
, remote
, or msbuild
. Most tasks should use launch
unless a remote connection is required.
Default Properties
The default properties are available on all types of tasks:
Property | Type | Description |
---|---|---|
taskLabel |
string | (Required.) Specifies the task label used in the user interface. |
appliesTo |
string | (Required.) Specifies which files the command can be performed on. The use of wildcards is supported, for example: "", ".cpp", "/*.txt" |
contextType |
string | Allowed values: "custom", "build", "clean", "rebuild". Determines where in the context menu the task will appear. Defaults to "custom". |
output |
string | Specifies an output tag to your task. |
inheritEnvironments |
array | Specifies a set of environment variables inherited from multiple sources. You can define variables in files like CMakeSettings.json or CppProperties.json and make them available to the task context. Visual Studio 16.4:: Specify environment variables on a per-task basis using the env.VARIABLE_NAME syntax. To unset a variable, set it to "null". |
passEnvVars |
boolean | Specifies whether or not to include additional environment variables to the task context. These variables are different from the ones defined using the envVars property. Defaults to "true". |
Launch properties
When the task type is launch
, these properties are available:
Property | Type | Description |
---|---|---|
command |
string | Specifies the full path of the process or script to launch. |
args |
array | Specifies a comma-separated list of arguments passed to the command. |
launchOption |
string | Allowed values: "None", "ContinueOnError","IgnoreError". Specifies how to proceed with the command when there are errors. |
workingDirectory |
string | Specifies the directory in which the command will run. Defaults to the project's current working directory. |
customLaunchCommand |
string | Specifies a global scope customization to apply before executing the command. Useful for setting environment variables like %PATH%. |
customLaunchCommandArgs |
string | Specifies arguments to customLaunchCommand. (Requires customLaunchCommand .) |
env |
Specifies a key-value list of custom environment variables. For example, "myEnv": "myVal" | |
commands |
array | Specifies a list of commands to invoke in order. |
Example
The following tasks invoke make.exe when a makefile is provided in the folder and the Mingw64
environment has been defined in CppProperties.json, as shown in CppProperties.json schema reference:
{
"version": "0.2.1",
"tasks": [
{
"taskLabel": "gcc make",
"appliesTo": "*.cpp",
"type": "launch",
"contextType": "custom",
"inheritEnvironments": [
"Mingw64"
],
"command": "make"
},
{
"taskLabel": "gcc clean",
"appliesTo": "*.cpp",
"type": "launch",
"contextType": "custom",
"inheritEnvironments": [
"Mingw64"
],
"command": "make",
"args": ["clean"]
}
]
}
These tasks can be invoked from the context menu when you right click on a .cpp file in Solution Explorer.
Remote Properties
Remote tasks are enabled when you install the Linux development with C++ workload and add a connection to a remote machine by using the Visual Studio Connection Manager. A remote task runs commands on a remote system and can also copy files to it.
When the task type is remote
, these properties are available:
Property | Type | Description |
---|---|---|
remoteMachineName |
string | The name of the remote machine. Must match a machine name in Connection Manager. |
command |
string | The command to send to the remote machine. By default commands are executed in the $HOME directory on the remote system. |
remoteWorkingDirectory |
string | The current working directory on the remote machine. |
localCopyDirectory |
string | The local directory to copy to the remote machine. Defaults to the current working directory. |
remoteCopyDirectory |
string | The directory on the remote machine into which localCopyDirectory is copied. |
remoteCopyMethod |
string | The method to use for copying. Allowed values: "none", "sftp", "rsync". rsync is recommended for large projects. |
remoteCopySourcesOutputVerbosity |
string | Allowed values: "Normal","Verbose","Diagnostic". |
rsyncCommandArgs |
string | Defaults to "-t --delete". |
remoteCopyExclusionList |
array | Comma-separated list of files in localCopyDirectory to exclude from copy operations. |
Example
The following task will appear in the context menu when you right-click on main.cpp in Solution Explorer. It depends on a remote machine called ubuntu
in Connection Manager. The task copies the current open folder in Visual Studio into the sample
directory on the remote machine and then invokes g++ to build the program.
{
"version": "0.2.1",
"tasks": [
{
"taskLabel": "Build",
"appliesTo": "main.cpp",
"type": "remote",
"contextType": "build",
"command": "g++ main.cpp",
"remoteMachineName": "ubuntu",
"remoteCopyDirectory": "~/sample",
"remoteCopyMethod": "sftp",
"remoteWorkingDirectory": "~/sample/hello",
"remoteCopySourcesOutputVerbosity": "Verbose"
}
]
}
MSBuild properties
When the task type is msbuild
, these properties are available:
Property | Type | Description |
---|---|---|
verbosity |
string | Specifies the MSBuild project build output verbosityAllowed values: "Quiet", "Minimal", "Normal", "Detailed", "Diagnostic". |
toolsVersion |
string | Specifies the toolset version to build the project, for example "2.0", "3.5", "4.0", "Current". Defaults to "Current". |
globalProperties |
object | Specifies a key-value list of the global properties to pass into the project, for example, "Configuration":"Release" |
properties |
object | Specifies a key-value list of additional project only properties. |
targets |
array | Specifies the list of targets to invoke, in order, on the project. The project's default target is used if none are specified. |