Share via


Personalización de las tareas de compilación y depuración para el desarrollo de "Abrir carpeta"

Visual Studio sabe cómo ejecutar varios lenguajes y bases de datos diferentes, pero no sabe cómo ejecutarlo todo. Si abrió una carpeta de código en Visual Studio y Visual Studio sabe cómo ejecutar el código, puede ejecutarlo de inmediato sin ninguna configuración adicional.

Si el código base usa herramientas de compilación personalizadas que Visual Studio no reconoce, debe proporcionar algunos detalles de configuración para ejecutar y depurar el código en Visual Studio. Mediante la definición de tareas de compilación, le indica a Visual Studio cómo compilar el código. Puede crear una o varias tareas de compilación para especificar todos los elementos que un lenguaje necesita para compilar y ejecutar su código. También puede crear tareas arbitrarias que pueden hacer casi todo lo que desee. Por ejemplo, puede crear una tarea para mostrar el contenido de una carpeta o cambiar el nombre de un archivo.

Use estos archivos .json para personalizar el código base sin proyecto:

Nombre del archivo Propósito
tasks.vs.json Especifique los modificadores del compilador y los comandos de compilación personalizada, además de las tareas arbitrarias (no relacionadas con la compilación).
Se accede a través del elemento de menú Configurar tareas del menú contextual del Explorador de soluciones.
launch.vs.json Especifique los argumentos de la línea de comandos para realizar la depuración.
Se accede a través del elemento de menú Configuración de depuración e inicio del menú contextual del Explorador de soluciones.

Estos archivos .json se encuentran en una carpeta oculta llamada .vs en la carpeta raíz del código base. Visual Studio crea los archivos tasks.vs.json y launch.vs.json según sea necesario cuando se elija Configurar tareas o Configuración de depuración e inicio en un archivo o una carpeta del Explorador de soluciones. Estos archivos .json están ocultos porque los usuarios habitualmente no desean insertarlos en el control de código fuente. Sin embargo, si desea poder comprobarlos en el control de código fuente, arrastre los archivos a la raíz del código base mediante el sistema de archivos, donde estarán visibles en el Explorador de soluciones y en el control de código fuente.

Sugerencia

Para ver archivos ocultos en Visual Studio, elija el botón Mostrar todos los archivos en la barra de herramientas del Explorador de soluciones.

Definición de tareas con tasks.vs.json

Puede automatizar los scripts de compilación o cualquier otra operación externa en los archivos que tiene en el área de trabajo actual al ejecutarlos directamente en el IDE. Para configurar una tarea nueva, haga clic con el botón derecho en un archivo o una carpeta y seleccione Configurar tareas.

Configure Tasks menu

De este modo, se crea (o abre) el archivo tasks.vs.json en la carpeta .vs. En este archivo, puede definir una tarea de compilación o una tarea arbitraria y, después, invocarla con el nombre que le asignó en el menú contextual del Explorador de soluciones.

Se pueden agregar tareas personalizadas a archivos individuales o a todos los archivos de un tipo específico. Por ejemplo, los archivos de paquete de NuGet pueden configurarse para que tengan una tarea "Restaurar paquetes" o todos los archivos de origen pueden configurarse para que tengan una tarea de análisis estático, como un linter para todos los archivos .js.

Definición de las tareas de compilación personalizadas

Si el código base usa las herramientas de compilación personalizadas que Visual Studio no reconoce, no podrá ejecutar ni depurar el código en Visual Studio hasta que complete algunos pasos de configuración. Visual Studio proporciona tareas de compilación en las que puede indicar a Visual Studio cómo compilar, recompilar y limpiar el código. El archivo de tarea de compilación tasks.vs.json asocia el bucle de desarrollo interno de Visual Studio con las herramientas de compilación personalizadas que usa el código base.

Considere un código base que consta de un solo archivo de C# llamado hello.cs. El archivo Make para este tipo de código base podría tener el aspecto siguiente:

build: directory hello.exe

hello.exe: hello.cs
	csc -debug hello.cs /out:bin\hello.exe

clean:
	del bin\hello.exe bin\hello.pdb

rebuild: clean build

directory: bin

bin:
	md bin

Para este tipo de archivo Make que contiene destinos de compilación, limpieza y recompilación, es posible definir el siguiente archivo tasks.vs.json. Contiene tres tareas de compilación para compilar, recompilar y limpiar el código base, con NMAKE como la herramienta de compilación.

{
  "version": "0.2.1",
  "outDir": "\"${workspaceRoot}\\bin\"",
  "tasks": [
    {
      "taskName": "makefile-build",
      "appliesTo": "makefile",
      "type": "launch",
      "contextType": "build",
      "command": "nmake",
      "args": [ "build" ],
      "envVars": {
        "VSCMD_START_DIR": "\"${workspaceRoot}\""
      }
    },
    {
      "taskName": "makefile-clean",
      "appliesTo": "makefile",
      "type": "launch",
      "contextType": "clean",
      "command": "nmake",
      "args": [ "clean" ],
      "envVars": {
        "VSCMD_START_DIR": "\"${workspaceRoot}\""
      }
    },
    {
      "taskName": "makefile-rebuild",
      "appliesTo": "makefile",
      "type": "launch",
      "contextType": "rebuild",
      "command": "nmake",
      "args": [ "rebuild" ],
      "envVars": {
        "VSCMD_START_DIR": "\"${workspaceRoot}\""
      }
    }
  ]
}

Después de definir las tareas de compilación en tasks.vs.json, se agregan elementos de menú contextual adicionales a los archivos correspondientes en el Explorador de soluciones. En este ejemplo, las opciones "compilar", "recompilar" y "limpiar" se agregan al menú contextual de cualquier archivo Make.

makefile context menu with build, rebuild, and clean

Nota:

Los comandos aparecen en el menú contextual bajo el comando Configurar tareas debido a la configuración de contextType. "build", "rebuild" y "clean" son comandos de compilación, por lo que aparecen en la sección de compilación al medio del menú contextual.

Cuando selecciona una de estas opciones, se ejecuta la tarea. El resultado aparece en la ventana Salida y los errores de compilación, en la Lista de errores.

Definición de las tareas arbitrarias

Puede definir tareas arbitrarias en el archivo tasks.vs.json para hacer prácticamente lo que desee. Por ejemplo, puede definir una tarea para mostrar el nombre del archivo actualmente seleccionado en la ventana Salida o para mostrar los archivos de un directorio específico.

En el ejemplo siguiente se muestra un archivo tasks.vs.json que define una sola tarea. Cuando se invoca, la tarea muestra el nombre del archivo .js actualmente seleccionado.

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "Echo filename",
      "appliesTo": "*.js",
      "type": "default",
      "command": "${env.COMSPEC}",
      "args": [ "echo ${file}" ]
    }
  ]
}
  • taskName especifica el nombre que aparece en el menú contextual.
  • appliesTo especifica los archivos en los que se puede realizar el comando.
  • La propiedad command especifica el comando que se va a invocar. En este ejemplo, la variable de entorno COMSPEC se usa para identificar el intérprete de la línea de comandos, habitualmente cmd.exe.
  • La propiedad args especifica los argumentos que se pasarán al comando invocado.
  • La macro ${file} recupera el archivo seleccionado en el Explorador de soluciones.

Después de guardar tasks.vs.json, puede hacer clic con el botón derecho en algún archivo .js de la carpeta y elegir Echo filename (Nombre de archivo de echo). El nombre de archivo se muestra en la ventana Salida.

Nota

Si el código base no contiene un archivo tasks.vs.json, puede crear uno si elige Configurar tareas con el botón derecho o en el menú contextual de un archivo en el Explorador de soluciones.

En el ejemplo siguiente se define una tarea que muestra los archivos y las subcarpetas del directorio bin.

{
  "version": "0.2.1",
  "outDir": "\"${workspaceRoot}\\bin\"",
  "tasks": [
    {
      "taskName": "List Outputs",
      "appliesTo": "*",
      "type": "default",
      "command": "${env.COMSPEC}",
      "args": [ "dir ${outDir}" ]
    }
  ]
}
  • ${outDir} es una macro personalizada que se define en primer lugar, antes del bloque tasks. Luego se llama en la propiedad args.

Esta tarea se aplica a todos los archivos. Cuando abre el menú contextual de algún archivo en el Explorador de soluciones, Enumerar salidas del nombre de la tarea aparece en la parte inferior del menú. Cuando elige Enumerar salidas, el contenido del directorio bin aparece en la ventana Salida de Visual Studio.

Arbitrary task in context menu

Ámbito de configuración

Puede haber varios archivos tasks.vs.json en la raíz y en los subdirectorios de un código base. Este diseño permite la flexibilidad necesaria para tener distintos comportamientos en diferentes subdirectorios del código base. Visual Studio agrega o invalida la configuración en todo el código base y establece la prioridad de los archivos en el siguiente orden:

  • Los archivos de configuración del directorio .vs de la carpeta raíz.
  • El directorio donde se procesa una configuración.
  • El directorio principal del directorio actual, hasta llegar al directorio raíz.
  • Los archivos de configuración del directorio raíz.

Estas reglas de agregación se aplican a tasks.vs.json. Para información sobre cómo se agrega configuración en otro archivo, consulte la sección correspondiente a dicho archivo en este artículo.

Propiedades de tasks.vs.json

En esta sección se describe parte de las propiedades que puede especificar en tasks.vs.json.

appliesTo

Puede crear tareas para cualquier archivo o carpeta si especifica su nombre en el campo appliesTo, por ejemplo "appliesTo": "hello.js". Las máscaras de archivo siguientes se pueden usar como valores:

Máscara de archivo Descripción
"*" tarea disponible para todos los archivos y carpetas del área de trabajo
"*/" tarea disponible para todas las carpetas del área de trabajo
"*.js" tarea disponible para todos los archivos con la extensión .js del área de trabajo
"/*.js" tarea disponible para todos los archivos con extensión .js de la raíz del área de trabajo
"src/*/" tarea disponible para todas las subcarpetas de la carpeta src
"makefile" tarea disponible para todos los archivos Make del área de trabajo
"/makefile" tarea disponible solo para el archivo Make de la raíz del área de trabajo

Macros de tasks.vs.json

Macro Descripción
${env.<VARIABLE>} Especifica cualquier variable de entorno (por ejemplo, ${env.PATH}, ${env.COMSPEC}, etc.) que esté establecida para el símbolo del sistema para desarrolladores. Para más información, consulte Símbolo del sistema para desarrolladores y PowerShell para desarrolladores.
${workspaceRoot} La ruta de acceso completa a la carpeta del área de trabajo (por ejemplo, C:\sources\hello)
${file} La ruta de acceso completa del archivo o la carpeta seleccionados para la ejecución de esta tarea (por ejemplo, C:\sources\hello\src\hello.js)
${relativeFile} La ruta de acceso relativa al archivo o la carpeta (por ejemplo, src\hello.js)
${fileBasename} El nombre del archivo sin ruta de acceso ni extensión (por ejemplo, hello)
${fileDirname} La ruta de acceso completa al archivo, sin el nombre de archivo (por ejemplo, C:\sources\hello\src)
${fileExtname} La extensión del archivo seleccionado (por ejemplo, .js)

Configuración de la depuración con launch.vs.json

Para configurar proyectos de CMake para la depuración, vea Configuración de sesiones de depuración de CMake.

  1. Para configurar el código base para realizar la depuración, en el Explorador de soluciones, elija el elemento de menú Configuración de depuración e inicio con un clic con el botón derecho o con el menú contextual del archivo ejecutable.

    Debug and Launch Settings context menu

  2. En el cuadro de diálogo Seleccionar un depurador, elija una opción y, luego, elija el botón Seleccionar.

    Select a Debugger dialog box

    Si el archivo launch.vs.json todavía no existe, se creará.

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "bin\\hello.exe",
          "name": "hello.exe"
        }
      ]
    }
    
  3. A continuación, haga clic con el botón derecho en el archivo ejecutable en el Explorador de solucionesy elija Establecer como elemento de inicio.

    El archivo ejecutable se designa como el elemento de inicio del código base y el título del botón Iniciar de la depuración cambia para reflejar el nombre del archivo ejecutable.

    Customized Start button

    Cuando presiona F5, el depurador se inicia y se detiene en cualquier punto de interrupción que se pueda haber establecido. Todas las ventanas familiares del depurador están disponibles y en funcionamiento.

    Importante

    Para más información sobre las tareas de compilación y depuración personalizadas en proyectos de abrir carpeta de C++, consulte Compatibilidad de la acción Abrir carpeta con sistemas de compilación de C++ en Visual Studio.

Especificación de argumentos para la depuración

Puede especificar los argumentos de la línea de comandos que se van a pasar para realizar la depuración en el archivo launch.vs.json. Agregue los argumentos de la matriz args, tal como se muestra en el ejemplo siguiente:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "bin\\hello.exe",
      "name": "hello.exe"
    },
    {
      "type": "default",
      "project": "bin\\hello.exe",
      "name": "hello.exe a1",
      "args": [ "a1" ]
    }
  ]
}

Cuando guarda este archivo, el nombre de la configuración nueva aparece en la lista desplegable de destinos de depuración y puede seleccionarlo para iniciar el depurador. Puede crear tantas configuraciones de depuración como desee.

Debug configurations drop-down list

Nota:

La propiedad de la matriz configurations en launch.vs.json se lee desde dos ubicaciones, el directorio raíz del código base y el directorio .vs. Si se produce algún conflicto, la prioridad la tiene el valor que aparece en .vs\launch.vs.json.

Archivos de configuración adicionales

Además de los tres archivos .json que se describen en este tema, Visual Studio también lee la configuración de algunos archivos adicionales, si existen en el código base.

.vscode\settings.json

Visual Studio lee la configuración limitada de un archivo denominado settings.json, si se encuentra en un directorio llamado .vscode. Esta funcionalidad se proporciona para los códigos base que se desarrollaron anteriormente en Visual Studio Code. Actualmente, la única configuración que se lee de .vscode\settings.json es files.exclude, que filtra los archivos de manera visual en el Explorador de soluciones y desde algunas herramientas de búsqueda.

Puede tener cualquier número de archivos .vscode\settings.json en el código base. La configuración que se lee de este archivo se aplica al directorio principal de .vscode y a todos los subdirectorios.

.gitignore

Los archivos .gitignore se usan para indicar a Git los archivos que debe omitir; es decir, cuáles son los archivos y directorios que no desea insertar en el repositorio. Los archivos .gitignore se incluyen habitualmente como parte de un código base para que la configuración se pueda compartir con todos los desarrolladores del código base. Visual Studio lee patrones en los archivos .gitignore para filtrar los archivos de manera visual y desde algunas herramientas de búsqueda.

La configuración que se lee del archivo .gitignore se aplica al directorio principal y a todos los subdirectorios.