Поделиться через


Создание задач сборки и отладки для разработки "Открыть папку"

Visual Studio может автоматически запускать различные языки программирования и базы кода. Параметр "Открыть папку " позволяет немедленно запускать код для распознанной базы кода без специальных инструкций и без создания проекта. Разработчики обычно используют этот подход для быстрого тестирования.

Для некоторых баз кода требуются пользовательские средства сборки, которые Visual Studio не распознает или не может немедленно обрабатывать с помощью параметра "Открыть папку ". В этих сценариях можно определить задачи сборки, чтобы указать Visual Studio, как создавать и отлаживать код. Задачи сборки указывают все элементы, необходимые для сборки и запуска кода, и можно использовать для выполнения практически любой необходимой операции.

В этой статье описывается, как определить задачи сборки для настройки параметров сборки и отладки для нераспознанной базы кода без проекта в Visual Studio.

Изучение файлов конфигурации JSON

Чтобы настроить базу кода без проекта, Visual Studio предоставляет два файла JSON (.json) для параметров конфигурации: задачи и запуск. Visual Studio создает (или открывает) эти файлы по мере необходимости при выборе определенных параметров в Visual Studio Обозреватель решений.

В следующей таблице описаны файлы JSON и их создание в Обозреватель решений.

Файл JSON Назначение конфигурации Доступ к файлам
tasks.vs.json Определите пользовательские команды сборки, пользовательские коммутаторы компилятора и произвольные (связанные с нестроками) задачи. В Обозреватель решений щелкните правой кнопкой мыши файл или папку, чтобы открыть контекстное меню, и выберите пункт "Настроить задачи".
launch.vs.json Определяет аргументы командной строки для отладки. В Обозреватель решений щелкните правой кнопкой мыши файл или папку, чтобы открыть контекстное меню, и выберите "Добавить конфигурацию отладки".

Добавление JSON-файлов в управление версиями

По умолчанию задачи и запуск JSON-файлов не отображаются в Обозреватель решений. Файлы находятся в скрытой папке с именем .vs в корневой папке (\) базы кода. Файлы скрыты, так как они обычно не добавляются в управление версиями. Скрытые файлы можно просмотреть в Visual Studio, выбрав параметр "Показать все файлы" в Обозреватель решений.

Если вы хотите добавить ФАЙЛЫ JSON в систему управления версиями, перетащите файлы в корневую папку базы кода (\) в файловой системе. Файлы становятся видимыми в Обозреватель решений и доступны для управления версиями.

Определение задач в файле tasks.vs.json

Скрипты сборки и внешние операции с файлами в текущей рабочей области можно автоматизировать, выполнив действия в качестве задач непосредственно в Visual Studio. Чтобы настроить новую задачу, щелкните правой кнопкой мыши файл или папку в Обозреватель решений и выберите пункт "Настройка задач".

Снимок экрана: настройка задач для автоматизации скриптов сборки и внешних операций с файлами в Обозреватель решений.

Это действие создает (или открывает) файл tasks.vs.json в папке VS . Вы определяете задачу сборки или произвольную задачу в этом файле, а Visual Studio добавляет имя задачи в качестве команды в меню Обозреватель решений правой кнопкой мыши. Вы можете вызвать задачу, выбрав соответствующую команду в Обозреватель решений.

Настраиваемые задачи можно размещать в отдельных файлах или во всех файлах определенного типа. Например, файлы пакетов NuGet можно настроить для задачи "Восстановить пакеты", или все исходные файлы можно настроить для задания статического анализа, например linter для всех файлов JavaScript (.js).

Создание задач для нераспознанных средств

Если в базе кода используются пользовательские средства сборки, не распознаваемые Visual Studio, вы не сможете выполнить и отладить код в Visual Studio, пока не завершите дополнительные действия по настройке.

Вы можете определить задачи сборки, чтобы указать Visual Studio, как создавать, перестраивать и очищать код. Файл tasks.vs.json объединяет внутренний цикл разработки Visual Studio с пользовательскими средствами сборки, которые вы определяете для базы кода.

Предположим, что в базе кода есть один файл C# с именем hello.cs. Файл makefile для такой базы кода может выглядеть следующим образом:

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

Для аналогичного файла makefile, содержащего целевые объекты сборки, очистки и перестроения, можно использовать параметр "Настроить задачи" для файла makefile и определить следующий файл tasks.vs.json. JSON-файл определяет задачи для сборки, перестроения и очистки базы кода с помощью NMAKE в качестве средства сборки:

{
  "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}\""
      }
    }
  ]
}

После определения задач сборки в файле tasks.vs.json Visual Studio добавляет соответствующие команды задач в меню правой кнопкой мыши в Обозреватель решений. В этом примере параметры сборки, перестроения и очистки добавляются в меню правой кнопкой мыши для экземпляров makefile в базе кода:

Снимок экрана: задачи сборки, перестроения и очистки для файла makefile, добавленного в меню правой кнопкой мыши в Обозреватель решений.

Visual Studio выводит новые команды в меню правой кнопкой мыши после команды "Настройка задач " в соответствии с их contextType параметрами. "сборка", "перестроение" и "очистка" являются командами сборки и перечислены в разделе "Сборка" меню правой кнопкой мыши.

При выборе настраиваемой команды задачи в меню правой кнопкой мыши выполняется операция. Visual Studio отображает выходные данные команды в окне вывода и все ошибки сборки в списке ошибок.

Создание задач для произвольных операций

Пользовательские задачи можно определить в файле tasks.vs.json для любой произвольной операции. Вы можете определить задачу, чтобы отобразить имя выбранного файла в окне вывода или перечислить файлы в указанной папке.

Пример: отображаемое имя выбранного в данный момент файла

В следующем примере показан файл tasks.vs.json , определяющий одну произвольную задачу. При вызове этой задачи операция отображает имя файла выбранного файла JavaScript (.js).

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "Echo filename",
      "appliesTo": "*.js",
      "type": "default",
      "command": "${env.COMSPEC}",
      "args": [ "echo ${file}" ]
    }
  ]
}

Код для этой задачи определяет следующие свойства:

  • taskName: имя команды задачи для Visual Studio, отображаемой в меню правой кнопкой мыши. В этом случае имя файла Echo.
  • appliesTo: файлы, с помощью которых команда задачи будет выполнять действия. В этом случае файлы JavaScript (.js).
  • command: команда для вызова. Эта задача использует COMSPEC переменную среды для идентификации интерпретатора командной строки (обычно cmd.exe).
  • args: любые аргументы для передачи при вызове команды Visual Studio.
  • ${file}: аргументы для этой задачи включают макрос, который извлекает файл, выбранный в настоящее время в Обозреватель решений.

После сохранения файла tasks.vs.json можно щелкнуть правой кнопкой мыши любой файл JavaScript (.js) в папке и выбрать имя файла Echo. Visual Studio отображает выбранное имя файла в окне вывода .

Пример. Перечисление файлов и вложенных папок

В следующем примере показан файл tasks.vs.json , определяющий задачу для перечисления файлов и вложенных папок папки bin :

{
  "version": "0.2.1",
  "outDir": "\"${workspaceRoot}\\bin\"",
  "tasks": [
    {
      "taskName": "List Outputs",
      "appliesTo": "*",
      "type": "default",
      "command": "${env.COMSPEC}",
      "args": [ "dir ${outDir}" ]
    }
  ]
}

Код для этой задачи определяет следующие свойства:

  • taskName: имя команды задачи для меню правой кнопкой мыши, список выходных данных.
  • appliesTo: эта задача действует для всех элементов в указанной папке, как указано при использовании подстановочного знака (*).
  • command: как и в предыдущем примере, задача использует COMSPEC переменную среды для идентификации интерпретатора командной строки (cmd.exe).
  • args: когда Visual Studio вызывает задачу, она передает вызов команде dir , которая перечисляет элементы каталога (папки).
  • ${outDir}: макрос {outDir} определяется перед блоком tasks . Он определяет папку bin в качестве каталога для действия.

Эта задача применяется ко всем файлам в базе кода. Когда Visual Studio добавляет имя команды для произвольной задачи в меню правой кнопкой мыши, она префиксирует команду с помощью run, как в выходных данных списка запуска.

Если открыть правой кнопкой мыши меню для любого файла в Обозреватель решений, команда выполнения списка задач отображается в качестве последней команды в разделе "Сборка" меню. При выборе выходных данных списка запуска Visual Studio выводит содержимое папки bin для базы кода в окне вывода :

Снимок экрана: произвольная задача, добавленная в меню правой кнопкой мыши в Visual Studio Обозреватель решений.

Использование нескольких файлов task.vs.json

В корневой папке (\) и вложенных папках базы кода можно использовать несколько tasks.vs.json файлов. Этот подход обеспечивает гибкость в определении поведения для определенных вложенных папок или файлов в базе кода.

Visual Studio объединяет или переопределяет параметры в базе кода и определяет приоритеты файлов в следующем порядке:

  1. Файлы параметров в папке VS в корневой папке (\).
  2. Папка, в которой вычисляется параметр.
  3. Родительская папка текущей папки, вплоть до корневой папки (\).
  4. Файлы параметров в корневой папке (\).

Эти правила агрегирования применяются только к экземплярам файла tasks.vs.json .

Проверка свойств для tasks.vs.json

В следующих разделах описаны некоторые свойства, которые можно указать в файле tasks.vs.json .

Установка свойства appliesTo

Вы можете создавать задачи для любого файла или папки, указав имя файла или папки со свойством appliesTo , например "appliesTo": "hello.js".

В следующей таблице перечислены значения маски файлов, которые можно использовать с свойством для создания определенного appliesTo поведения задачи:

Значение (маска файла) Задача применяется к
"*" Все файлы и папки в рабочей области
"*/" Все папки в рабочей области
"*.js" Все файлы с расширением JavaScript (.js) в рабочей области
"/*.js" Все файлы с расширением JavaScript (.js) в корневой папке рабочей области (\)
"src/*/" Все вложенные папки папки src
"makefile" Все файлы с именем makefile в рабочей области
"/makefile" Только файл с именем makefile в корневой папке рабочей области (\)

Использование макросов в аргументах задач

Макросы можно передать в качестве аргументов для задачи, чтобы увеличить поведение задачи при вызове команды Visual Studio.

В следующей таблице перечислены некоторые примеры макросов:

Макрос Description Примеры
${env.<VARIABLE>} Указывает любую переменную среды, пригодную для использования в командной строке разработчика. Дополнительные сведения см. в статье о командной строке разработчика и PowerShell для разработчиков. ${env.PATH}, ${env.COMSPEC}
${workspaceRoot} Предоставляет полный путь к папке рабочей области. C:\sources\hello, C:\sources\hello\bin
${file} Предоставляет полный путь к файлу или папке. C:\sources\hello\src\hello.js*, C:\sources\hello\src\test.js*
${relativeFile} Предоставляет относительный путь к файлу или папке. src\hello.js*, bin\hello.exe
${fileBasename} Предоставляет имя файла, за исключением пути или расширения. hello, test
${fileDirname} Предоставляет полный путь к файлу, за исключением имени файла. C:\sources\hello\src*, C:\sources\hello\bin\test\*
${fileExtname} Предоставляет расширение выбранного файла. .js, , .cs.exe

Настройка отладки с помощью launch.vs.json

Visual Studio предоставляет launch.vs.json файл, который можно использовать для настройки отладки для базы кода.

Примечание.

Сведения о настройке проектов CMake для отладки см. в разделе Настройка сеансов отладки CMake.

  1. В Обозреватель решений щелкните правой кнопкой мыши исполняемый файл (.exe) и выберите команду Добавить конфигурацию отладки:

    Снимок экрана: выбор параметра

  2. В диалоговом окне "Выбор отладчика" выберите параметр конфигурации отладки из списка и нажмите кнопку "Выбрать".

    Снимок экрана: выбор отладчика для конфигурации запуска в Обозреватель решений.

    Если файл launch.vs.json еще не существует, Visual Studio создает файл. Ниже приведен пример файла, созданного для исполняемого файла hello.exe :

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "bin\\hello.exe",
          "projectTarget": "",
          "name": "hello.exe"
        }
      ]
    }
    
  3. После получения файла запуска щелкните правой кнопкой мыши исполняемый файл для базы кода в Обозреватель решений и выберите "Задать в качестве элемента запуска".

    Исполняемый файл обозначается как элемент запуска для базы кода, и Visual Studio задает метку для кнопки "Пуск отладки", чтобы отразить имя исполняемого файла:

    Снимок экрана: пользовательская метка для действия запуска в Visual Studio.

    При запуске отладчика с помощью F5 Visual Studio начинает отладку кода и останавливается в любой заданной точке останова. Все обычные окна отладчика будут доступны и активны.

    Дополнительные сведения о пользовательских задачах сборки и отладки в проектах открытых папок C++ см. в статье "Поддержка открытых папок для систем сборки C++ в Visual Studio".

Указание аргументов для отладки

Аргументы командной строки можно указать для передачи в отладчик в файле launch.vs.json . Добавьте нужные аргументы в массив args, как показано в следующем примере:

{
  "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" ]
    }
  ]
}

Запуск конфигурации отладки

Можно создать любое количество конфигураций отладки. При сохранении файла запуска имена конфигураций добавляются в раскрывающийся список целевых объектов отладки. Чтобы запустить отладчик, можно выбрать конкретный целевой объект:

Снимок экрана: доступные конфигурации в раскрывающемся списке целевого объекта отладки в Visual Studio Обозреватель решений.

Если в меню не отображаются дополнительные целевые объекты, выберите "Показать и скрыть целевые объекты отладки " и настройте видимые целевые объекты.

Общие сведения о приоритете конфигураций

Visual Studio сканирует два расположения элементов, указанных в свойстве массива configurations в launch.vs.json файлах:

  • Корневая папка (\) для базы кода
  • Папка VS

Если у вас есть launch.vs.json файлы в обоих расположениях, а в определении для конфигурации возникает конфликт, значение в файле VS\launch.vs.json имеет приоритет.

Использование других файлов параметров

Помимо задачи и запуска JSON-файлов Visual Studio считывает параметры из других файлов конфигурации, определенных в базе кода. К двум часто используемым файлам относятся settings.json и .gitignore.

Определение параметров кода с помощью vscode\settings.json

Visual Studio считывает ограниченные параметры из файла с именем settings.json, если файл находится в папке с именем VSCODE.

Эта функция предоставляется для баз кода, разработанных ранее в Visual Studio Code. В настоящее время единственным параметром , считываемым из vscode\settings.json-файла , является files.exclude. Этот параметр используется для визуального фильтрации файлов в Обозреватель решений и из некоторых средств поиска.

В базе кода можно использовать несколько файлов VScode\settings.json . Параметры, считываемые из этого файла, применяются к родительской папке VSCODE и всем ее вложенным папкам.

Настройка файлов Git с помощью .gitignore

Вы можете использовать gitignore-файл , чтобы сообщить Git, какие файлы игнорировать при применении системы управления версиями. Файлы .gitignore обычно включаются в состав базы кода, чтобы параметры можно было совместно использовать для всех разработчиков базы кода. Visual Studio считывает шаблоны из файлов .gitignore для фильтрации элементов при отображении и в некоторых средствах поиска.

Параметры, считываемые из файла .gitignore, применяются к родительской папке и всем вложенным папкам.