Что такое рабочая область в visual studio code
Узнайте, как выполнять интерактивную отладку экспериментов, конвейеров и развертываний Машинного обучения Azure с помощью Visual Studio Code (VS Code) и debugpy.
Запуск и отладка экспериментов в локальной среде
Используйте расширение Машинное обучение Azure для проверки, запуска и отладки экспериментов машинного обучения перед их отправкой в облако.
Предварительные требования
Расширение Машинного обучения Azure для VS Code (предварительный просмотр). Дополнительные сведения см. в разделе Настройка расширения Машинного обучения Azure VS Code.
Расширение Машинного обучения Azure для VS Code по умолчанию использует CLI (версии 2.0). Инструкции в этом руководстве предполагают использование версии CLI 1.0. Чтобы переключиться на CLI версии 1.0, задайте для параметра azureML.CLI Compatibility Mode в Visual Studio Code значение 1.0 . Дополнительные сведения об изменении параметров в Visual Studio Code см. в документации по параметрам пользователей и рабочих областей.
Docker Desktop для Mac и Windows
Подсистема Docker для Linux.
Для Windows, хотя и не является обязательным, настоятельно рекомендуется использовать Docker с подсистемой Windows для Linux (WSL) 2.
Отладка эксперимента локально
Перед запуском эксперимента в локальной среде убедитесь, что:
- Docker запущен.
- Параметр azureML.CLI Compatibility Mode в Visual Studio Code имеет значение 1.0 , как указано в предварительных требованиях
В VS Code откройте представление расширения Машинного обучения Azure.
Разверните узел подписки, содержащий рабочую область. Если у вас ее еще нет, можно создать рабочую область машинного обучения Azure с помощью расширения.
Разверните узел рабочей области.
Щелкните правой кнопкой мыши узел Эксперименты и выберите Создать эксперимент. При появлении запроса введите имя для эксперимента.
Разверните узел эксперименты, щелкните правой кнопкой мыши эксперимент, который необходимо запустить, и выберите команду Запустить эксперимент.
В списке параметров для запуска эксперимента выберите локально.
В первый раз используйте только в Windows. При появлении запроса на разрешение общей папки выберите Да. Включение файлового ресурса позволяет Docker подключать каталог, содержащий скрипт, к контейнеру. Кроме того, он позволяет Docker сохранять журналы и выходные данные из запуска во временном каталоге в системе.
Выберите Да для отладки эксперимента. В противном случае нажмите кнопку Нет. Если выбрать нет, ваш эксперимент будет выполняться локально без подключения к отладчику.
Выберите создать новую конфигурацию запуска, чтобы создать конфигурацию запуска. Конфигурация запуска определяет скрипт, который требуется запустить, зависимости и наборы данных. Кроме того, если у вас уже есть такая возможность, выберите ее в раскрывающемся списке.
После отправки эксперимента создается образ Docker, содержащий скрипт, и конфигурации, указанные в конфигурации запуска.
Когда начинается процесс сборки образа Docker, файловый поток 60_control_log.txt выводится в консоль вывода в VS Code.
Первое создание образа Docker может занять несколько минут.
После сборки образа появится запрос на запуск отладчика. Задайте точки останова в скрипте и нажмите кнопку запустить отладчик, когда будете готовы начать отладку. Это присоединяет отладчик VS Code к контейнеру, выполняющему эксперимент. Кроме того, в расширении Машинное обучение Azure наведите указатель мыши на узел для текущего запуска и щелкните значок воспроизведения, чтобы запустить отладчик.
Для одного эксперимента нельзя использовать несколько сеансов отладки. Однако можно выполнить отладку двух или более экспериментов, используя несколько экземпляров VS Code.
На этом этапе вы сможете пошагово отлаживать код с помощью VS Code.
Если вы хотите отменить запуск в любой момент, щелкните правой кнопкой мыши узел выполнить и выберите команду Отменить запуск.
Аналогично удаленному запуску эксперимента можно развернуть узел выполнения, чтобы проверить журналы и выходные данные.
Образы Docker, использующие те же зависимости, определенные в вашей среде, используются повторно между запусками. Однако при запуске эксперимента с помощью новой или другой среды создается новый образ. Так как эти образы сохраняются в локальном хранилище, рекомендуется удалить старые или неиспользуемые образы Docker. Чтобы удалить образы из системы, используйте Docker CLI или расширение VS Code Docker.
Отладка и устранение неполадок в конвейерах машинного обучения
В некоторых случаях может потребоваться интерактивная отладка кода Python, используемого в конвейере машинного обучения. С помощью VS Code и debugpy можно присоединяться к коду, как он выполняется в среде обучения.
Предварительные требования
Рабочая область машинного обучения Azure, настроенная для использования виртуальной сети Azure.
Конвейер машинного обучения Azure, использующий скрипты Python в рамках этапов конвейера. Например, PythonScriptStep.
Машинное обучение вычислительного кластера Azure, который находится в виртуальной сети и используется конвейером для обучения.
Среда разработки, которая находится в виртуальной сети. Средой разработки может быть одно из следующего:
- Виртуальная машина Azure в виртуальной сети
- Вычислительный экземпляр виртуальной машины записной книжки в виртуальной сети
- Клиентский компьютер, имеющий подключение к виртуальной сети по частной сети либо по VPN, либо через ExpressRoute.
Дополнительные сведения об использовании виртуальной сети Azure с Машинным обучением Azure см. в статье Общие сведения об изоляции и конфиденциальности виртуальной сети.
Хотя вы можете работать с ресурсами Машинного обучения Azure, которые не находятся за виртуальной сетью, рекомендуется использовать виртуальную сеть.
Принцип работы
Этапы конвейера машинного обучения запускают скрипты Python. Эти скрипты изменяются для выполнения следующих действий:
Регистрировать IP-адрес узла, на котором они выполняются. Используйте IP-адрес для подключения отладчика к сценарию.
Запустите компонент отладки debugpy и дождитесь подключения отладчика.
В среде разработки вы отслеживаете журналы, созданные процессом обучения, чтобы найти IP-адрес, на котором выполняется сценарий.
Вы указываете VS Code IP-адреса для подключения отладчика к с помощью launch.json файла.
Вы подключаете отладчик и интерактивно пройдите по сценарию.
Настройка скриптов Python
Чтобы включить отладку, внесите следующие изменения в скрипты Python, используемые шагами в конвейере ML:
Добавьте в файл следующие операторы импорта:
Добавьте следующие аргументы. Эти аргументы позволяют включить отладчик по мере необходимости и задать время ожидания для подключения отладчика:
Добавьте следующие операторы. Эти инструкции загружают текущий контекст выполнения, чтобы можно было зарегистрировать IP-адрес узла, на котором выполняется код:
Добавьте инструкцию if , запускающую debugpy, и дождитесь присоединения отладчика. Если отладчик не подключается до истечения времени ожидания, сценарий продолжится в нормальном режиме. Обязательно замените значения HOST и PORT в listen собственной функцией.
В следующем примере кода Python показан простой файл train.py , позволяющий выполнять отладку:
Настройка конвейера машинного обучения
Чтобы предоставить пакеты Python, необходимые для запуска debugpy и получения контекста выполнения, создайте среду и задайте pip_packages=['debugpy', 'azureml-sdk=='] . Измените версию пакета SDK, чтобы она соответствовала используемой. В следующем фрагменте кода показано, как создать кластер AKS:
В разделе Настройка скриптов Python в скрипты, используемые этапами конвейера машинного обучения, были добавлены новые аргументы. В следующем фрагменте кода показано, как использовать эти аргументы, чтобы включить отладку для компонента и установить время ожидания. Здесь также показано, как использовать созданную ранее среду, задав runconfig=run_config :
При выполнении конвейера каждый шаг создает дочерний запуск. Если включена отладка, то измененный сценарий записывает в журнал сведения, аналогичные следующему тексту в 70_driver_log.txt для дочернего запуска:
Сохраните значение ip_address . Они будут использоваться в следующем разделе.
Вы также можете найти IP-адрес из журналов выполнения для дочернего выполнения этого шага конвейера. Дополнительные сведения о просмотре этих сведений см. в статье мониторинг запусков и метрик эксперимента машинного обучения Azure.
Настройка среды разработки
Чтобы установить debugpy в среде разработки VS Code, используйте следующую команду:
Дополнительные сведения об использовании PTVSD в VS Code см. на этой странице.
Чтобы настроить VS Code для взаимодействия с вычислителем Машинного обучения Azure, в котором работает отладчик, создайте новую конфигурацию отладки:
В VS Code выберите меню Отладка, а затем щелкните Открыть конфигурации. Откроется файл с именем launch.json.
В файле launch.json найдите строку, содержащую "configurations": [ , и вставьте после нее следующий текст. Измените запись "host": "" на IP-адрес, возвращенный в журналах из предыдущего раздела. Измените запись "localRoot": "$/code/step" на локальный каталог, содержащий копию отлаживаемого скрипта:
Если в разделе конфигурации уже есть другие записи, добавьте запятую (,) после вставленного кода.
Рекомендуется, особенно для конвейеров, размещать ресурсы для скриптов в отдельных каталогах, чтобы код был важен только для каждого из шагов. В этом примере пример значения localRoot ссылается на /code/step1 .
При отладке нескольких скриптов в разных каталогах создайте отдельный раздел конфигурации для каждого скрипта.
Сохраните файл launch.json.
Подключение отладчика
Откройте VS Code и откройте локальную копию скрипта.
Задайте точки останова, где сценарий должен останавливаться после присоединения.
На этом этапе VS Code подключается к PTVSD внутри контейнера Docker и останавливается при достижении точки останова, заданной ранее. Теперь вы можете пошагово выполнять код, просматривать переменные и т. д.
Устранение неполадок развертываний
В некоторых случаях может потребоваться интерактивная отладка кода Python, содержащегося в развертывании модели. Например, если начальный сценарий не работает и причину невозможно определить с помощью дополнительного ведения журнала. Используя VS Code и debugpy, вы можете присоединить отладчик к коду, выполняющемуся внутри контейнера Docker.
Сохраняйте время и перехватите ошибки раньше, локально отлаживая управляемые сетевые конечные точки и развертывания. Дополнительные сведения см. в разделе Локальная отладка управляемых сетевых конечных точек в Visual Studio Code (предварительная версия).
Этот метод отладки не работает при использовании Model.deploy() и LocalWebservice.deploy_configuration для развертывания модели в локальной среде. В этом случае необходимо создать образ, используя метод Model.package().
Для локальных развертываний веб-службы требуется рабочая установка Docker в локальной системе. Дополнительные сведения об использовании Docker см. в соответствующей документации. Обратите внимание, что при работе с экземплярами вычислений Docker уже установлен.
Настройка среды разработки
Чтобы установить debugpy в локальной среде разработки VS Code, используйте следующую команду:
Дополнительные сведения об использовании PTVSD в VS Code см. на этой странице.
Чтобы настроить VS Code для взаимодействия с образом Docker, создайте новую конфигурацию отладки:
В VS Code выберите меню Отладка в области выполнения, а затем выберите Открыть конфигурации. Откроется файл с именем launch.json.
В файле launch.json найдите единицу "configurations" (строку, содержащую "configurations": [ ) и вставьте после нее следующий текст.
После вставки launch.js файл должен выглядеть следующим образом:
Если в разделе конфигурации уже есть другие записи, добавьте запятую ( , ) после вставленного кода.
Этот раздел присоединяется к контейнеру Docker через порт 5678.
Сохраните файл launch.json.
Создание образа, содержащего debugpy
Измените среду conda для своего развертывания, добавив в нее PTVSD. В следующем примере демонстрируется добавление с помощью параметра pip_packages :
Чтобы запустить debugpy и дождаться подключения при запуске службы, добавьте следующее в начало файла score.py :
Создайте образ на основе определения среды и извлеките его в локальный реестр.
В этом примере предполагается, что ws указывает на вашу рабочую область Машинное обучение Azure, а model представляет собой развертываемую модель. Файл myenv.yml содержит зависимости conda, созданные на шаге 1.
Чтобы упростить работу с изображением локально, можно использовать следующую команду, чтобы добавить тег для этого изображения. Замените myimagepath в следующей команде на значение местоположения из предыдущего шага.
На остальных шагах для обозначения расположения локального образа вы можете указывать debug:1 вместо значения полного пути.
Отладка службы
Если вы установили время ожидания для подключения debugpy в файле score.py , необходимо подключить VS Code к сеансу отладки до истечения этого времени. Запустите VS Code, откройте локальную копию score.py , установите точку останова и подготовьте ее к работе, прежде чем выполнять действия, описанные в этом разделе.
Дополнительные сведения об отладке и установке точек останова см. на этой странице.
Чтобы запустить контейнер Docker с помощью образа, используйте следующую команду:
Это присоединяет ваш score.py локально к объекту к контейнеру. Таким образом, любые изменения в редакторе автоматически отражаются в контейнере
Для лучшего удобства можно переходить к контейнеру с помощью нового интерфейса VS Code. Выберите Docker расширение на боковой панели VS Code, найдите созданный локальный контейнер в этой документации debug:1 . Щелкните этот контейнер правой кнопкой мыши и выберите "Attach Visual Studio Code" , затем автоматически откроется новый интерфейс VS Code, и этот интерфейс отобразится внутри созданного контейнера.
В контейнере выполните следующую команду в оболочке
После этого в оболочке в контейнере можно увидеть следующие выходные данные:
После нажатия зеленой стрелки и подключения отладчика в контейнере VS Code интерфейс можно увидеть некоторые новые сведения:
Кроме того, в основном интерфейсе VS Code доступны следующие возможности:
И теперь локальный объект, score.py присоединенный к контейнеру, уже остановлен в точках останова, где вы задали значение. На этом этапе VS Code подключается к PTVSD внутри контейнера Docker и останавливается при достижении точки останова, заданной ранее. Теперь вы можете пошагово выполнять код, просматривать переменные и т. д.
Дополнительные сведения об использовании VS Code для отладки Python см. на странице Отладка кода Python.
Остановка контейнера
Чтобы остановить контейнер, используйте следующую команду:
Дальнейшие действия
Теперь, когда вы настроили VS Code удаленно, вы можете использовать вычислительный экземпляр в качестве удаленного вычислений от VS Code для интерактивной отладки кода.
You can work with multiple project folders in Visual Studio Code with multi-root workspaces. This can be helpful when you are working on several related projects at one time. For example, you might have a repository with a product's documentation that you like to keep current when you update the product source code.
Note: If you'd like to learn more about the VS Code "workspace" concept, you can review What is a VS Code "workspace"? Unless you are explicitly creating a multi-root workspace, a "workspace" is just your project's single root folder.
Adding folders
It is easy to add another folder to your existing workspace. There are several gestures for adding folders:
Add Folder to Workspace
The File > Add Folder to Workspace command brings up an Open Folder dialog to select the new folder.
Once a root folder is added, the Explorer will show the new folder as a root in the File Explorer. You can right-click on any of the root folders and use the context menu to add or remove folders.
The File Explorer should work and behave as before. You can move files between root folders and use any of the typical file operation actions provided in the context menu and the Explorer view.
Settings like files.exclude are supported for each root folder if configured, and across all folders if configured as global user setting.
Drag and drop
You can use drag and drop to add folders to a workspace. Drag a folder to the File Explorer to add it to the current workspace. You can even select and drag multiple folders.
Note: Dropping a single folder into the editor region of VS Code will still open the folder in single folder mode. If you drag and drop multiple folders into the editor region, a new multi-root workspace will be created.
You can also use drag and drop to reorder folders in the workspace.
Multiple selection native file open dialogs
Opening multiple folders with your platform's native file open dialog will create a multi-root workspace.
command line --add
Add a folder or multiple folders to the last active VS Code instance for a multi-root workspace.
Removing folders
You can remove a folder from a Workspace with the Remove Folder from Workspace context menu command.
Workspace file
When you save your workspace, it will create a .code-workspace file and the file name will be displayed in the File Explorer.
Save Workspace As.
If you want to move your Workspace file to a new location, you can use the File > Save Workspace As command, which will automatically set the correct folder paths relative to the new Workspace file location.
Opening workspace files
To reopen a Workspace, you can:
- Double-click the .code-workspace file in your platform's Explorer.
- Use the File >Open Workspace command and select the Workspace file.
- Select the Workspace from the File >Open Recent ( ⌃R (Windows, Linux Ctrl+R ) ) list.
- Workspaces have a (Workspace) suffix to differentiate them from folders.
Just like Close Folder when a single folder is open in VS Code, there is a Close Workspace ( ⌘K F (Windows, Linux Ctrl+K F ) ) command to close the active Workspace.
Workspace file schema
The schema of .code-workspace is fairly straightforward. You have an array of folders with either absolute or relative paths. Relative paths are better when you want to share Workspace files.
You can override the display name of your folders with the name attribute, to give more meaningful names to folders in the Explorer. For example, you could name your project folders such as 'Product' and 'Documentation' to easily identify the content by folder name:
which will result in the following Explorer display:
As you can see from the example above, you can add comments to your Workspace files.
The Workspace file can also contain Workspace global settings under settings and extension recommendations under extensions , which we will discuss below.
General UI
Editor
There are only a few changes to the VS Code UI when you are using multi-root workspaces, primarily to disambiguate files between folders. For example, if there is a name collision between files in multiple folders, VS Code will include the folder name in tabbed headers.
If you'd always like to see the folder displayed in the tabbed header, you can use the workbench.editor.labelFormat setting "medium" or "long" values to show the folder or full paths.
VS Code UI such as the OPEN EDITORS and Quick Open ( ⌘P (Windows, Linux Ctrl+P ) ) lists include the folder name.
If you are using an File Icon Theme and the active theme supports it, you will see a special Workspace icon.
Below you can see the Workspace icons from the built-in Minimal (Visual Studio Code) file icon theme:
Search
VS Code features like global search work across all folders and group the search results by folder.
When you have a multi-root workspace open, you can choose to search in a single root folder by using the ./ syntax in the files to include box. For example, if you enter ./project1/**/*.txt , that will search for all .txt files under the project1/ root folder.
Settings
With multiple root folders in one workspace, it is possible to have a .vscode folder in each root folder defining the settings that should apply for that folder. To avoid setting collisions, only resource (file, folder) settings are applied when using a multi-root workspace. Settings that affect the entire editor (for example, UI layout) are ignored. For example, two projects cannot both set the zoom level.
User settings are supported as with single folder projects and you can also set global Workspace settings that will apply to all folders in your multi-root Workspace. Global Workspace settings will be stored in your .code-workspace file.
When you go from a single folder instance to multiple folders, VS Code will add the appropriate editor-wide settings from the first folder to the new global Workspace settings.
You can easily review and modify the different settings files through the Settings editor. The Settings editor tabs let you select your User settings, global Workspace settings, and individual folder settings.
You can also open specific settings files with the commands:
- Preferences: Open User Settings - Open your global User settings
- Preferences: Open Workspace Settings - Open the settings section of your Workspace file.
- Preferences: Open Folder Settings - Open the settings for the active folder.
Global Workspace settings override User settings and folder settings can override Workspace or User settings.
Unsupported folder settings
Unsupported editor-wide folder settings will be shown as grayed out in your folder settings and are filtered out of the DEFAULT FOLDER SETTINGS list. You will also see an information icon in front of the setting.
Debugging
With multi-root workspaces, VS Code searches across all folders for launch.json debug configuration files and displays them with the folder name as a suffix. Additionally VS Code will also display launch configurations defined in the workspace configuration file.
The example above shows the debugging configurations for the TSLint extension. There is a launch configuration from the tslint extension folder to start the extension running in the VS Code Extension Host and also an attach configuration from the tslint-server folder to attach the debugger to a running TSLint server.
You can also see the three Add Config commands for the folders, tslint , tslint-server , and tslint-tests , in the vscode-tslint Workspace. The Add Config command will either open an existing launch.json file in the folder's .vscode subfolder or create a new one and display the debugging configuration template dropdown.
Variables used in a configuration (for example $ or the now deprecated $ ) are resolved relative to the folder they belong to. It is possible to scope a variable per workspace folder by appending the root folder's name to a variable (separated by a colon).
Workspace launch configurations
Workspace scoped launch configurations live in the "launch" section of the workspace configuration file (Workspaces: Open Workspace Configuration File in the Command Palette):
Alternatively, new launch configurations can be added via the "Add Config (workspace)" entry of the Launch Configuration dropdown menu:
A compound launch configuration can reference the individual launch configurations by name as long as the names are unique within the workspace, for example:
If the individual launch configuration names are not unique, the qualifying folder can be specified with a more verbose "folder" syntax:
In addition to compounds , the launch section of the workspace configuration file can contain regular launch configurations too. Make sure that all used variables are explicitly scoped to a specific folder because otherwise they are not valid for the workspace. You can find more details about explicitly scoped variables in the Variables Reference.
Here is an example for a launch configuration where the program lives in a folder "Program" and where all files from a folder "Library" should be skipped when stepping:
Tasks
Similar to how VS Code searches for debugging configurations, VS Code will also try to autodetect tasks from gulp, grunt, npm, and TypeScript project files across all folders in a workspace as well as search for tasks defined in tasks.json files. The location of tasks is indicated by a folder name suffix. Note that tasks defined in tasks.json must be version 2.0.0.
From the TSLint extension Workspace example above, you can see that there are two configured tasks from tasks.json files in the tslint and tslint-tests folders and numerous autodetected npm and TypeScript compiler detected tasks.
Workspace task configuration
Workspace scoped tasks live in the "tasks" section of the workspace configuration file (Workspaces: Open Workspace Configuration File in the Command Palette). Only "shell" and "process" type tasks can be defined in the workspace configuration file.
Source Control
With multi-root workspaces, there is a SOURCE CONTROL PROVIDERS section that gives you an overview when you have multiple active repositories. These can be contributed by several SCM providers; for example, you can have Git repositories side-by-side with Azure DevOps Server workspaces. As you select repositories in this view, you can see the source control details below.
You can use Ctrl+Click or Shift+Click to select multiple repositories. Their details will appear as separate regions underneath.
Extensions
If you are an extension author, you can review our Adopting Multi Root Workspace APIs guide to learn about VS Code multi-root workspace APIs and how to make your extension work well across multiple folders.
Below are some of the popular extensions that have adopted the multi-root workspace APIs.
Note: If an extension doesn't yet support multiple folders, it will still work in the first folder of your multi-root workspace.
Extension recommendations
VS Code supports folder level extension recommendations through the extensions.json files under the folder's .vscode subfolder. You can also provide global Workspace extension recommendations by adding them to your .code-workspace file. You can use the Extensions: Configure Recommended Extensions (Workspace Folder) command to open your Workspace file and add extension identifiers (.) to the extensions.recommendations array.
Next steps
-
- More about single-folder and multi-root workspaces. - Learn how to set up debugging for your application. - Tasks let you run external tools like compilers within VS Code.
Common questions
How can I go back to working with a single project folder?
You can either close the Workspace and open the folder directly or remove the folder from Workspace.
As an extension author what do I need to do?
See our Adopting Multi Root Workspace APIs guide. Most extensions can easily support multi-root workspaces.
A Visual Studio Code "workspace" is the collection of one or more folders that are opened in a VS Code window (instance). In most cases, you will have a single folder opened as the workspace but, depending on your development workflow, you can include more than one folder, using an advanced configuration called Multi-root workspaces.
The concept of a workspace enables VS Code to:
- Configure settings that only apply to a specific folder or folders but not others.
- Persist task and debugger launch configurations that are only valid in the context of that workspace.
- Store and restore UI state associated with that workspace (for example, the files that are opened).
- Selectively enable or disable extensions only for that workspace.
You may see the terms "folder" and "workspace" used interchangeably in VS Code documentation, issues, and community discussions. Think of a workspace as the root of a project that has extra VS Code knowledge and capabilities.
Note: It is also possible to open VS Code without a workspace. For example, when you open a new VS Code window by selecting a file from your platform's File menu, you will not be inside a workspace. In this mode, some of VS Code's capabilities are reduced but you can still open text files and edit them.
How do I open a VS Code "workspace"?
The easiest way to open a workspace is using the File menu and selecting one of the available folder entries for opening. Alternatively if you launch VS Code from a terminal, you can pass the path to a folder as the first argument to the code command for opening.
Single-folder workspaces
You don't have to do anything for a folder to become a VS Code workspace other than open the folder with VS Code. Once a folder has been opened, VS Code will automatically keep track of things such as your open files and editor layout so the editor will be as you left it when you reopen that folder. You can also add other folder-specific configurations such as workspace-specific settings (versus global user settings), task definitions, and debugging launch files (see below in the workspace settings section).
A single-folder workspace opened inside VS Code
Multi-root workspaces
Multi-root workspaces are an advanced capability of VS Code that allows you to configure multiple distinct folders to be part of the workspace. Instead of opening a folder as workspace, you will open a .code-workspace JSON file that lists the folders of the workspace. For example:
A multi-root workspace opened in VS Code
Note: The visual difference of having a folder opened versus opening a .code-workspace file can be subtle. To give you a hint that a .code-workspace file has been opened, some areas of the user interface (for example, the root of the File Explorer) show an extra (Workspace) suffix next to the name.
Untitled multi-root workspaces
It is easy to add or remove folders in your workspace. You can start off by opening a folder in VS Code and then later add more folders as you see fit. Unless you already have opened a .code-workspace file, the first time you add a second folder to a workspace, VS Code will automatically create an "untitled" workspace. In the background, VS Code automatically maintains a untitled.code-workspace file for you that contains all of the folders and workspace settings from your current session. The workspace will remain "untitled" until you decide to save it to disk.
An untitled multi-root workspace opened in VS Code
Note: There is really no difference between an untitled workspace and a saved workspace other than the fact that an untitled workspace is automatically created for you for your convenience and will always restore until you save it. We automatically delete untitled workspaces (after asking you for confirmation) when you close a window in which an untitled workspace is opened.
Workspace settings
Workspace settings enable you to configure settings in the context of the workspace you have opened and always override global user settings. They are physically stored in a JSON file and their location depends on whether you opened a folder as a workspace or you opened a .code-workspace file.
Refer to the settings documentation for a comprehensive explanation of setting scopes and their file locations.
Single-folder workspace settings
Workspace settings will be stored in .vscode/settings.json when you open a folder as workspace.
The Settings editor when a folder is opened as workspace
Multi-root workspace settings
When you open a .code-workspace as workspace, all workspace settings will be added into the .code-workspace file.
You can still configure settings per root folder and the Settings editor will present a third setting scope called Folder Settings:
The Settings editor when a multi-root workspace is opened
Settings configured per folder will override settings defined in the .code-workspace .
Workspace tasks and launch configurations
Similar to how workspace settings are specific to a workspace, tasks and launch configurations can also be scoped to a workspace. Depending on whether you have a folder opened as workspace or a .code-workspace file, the location of workspace task and launch configurations will either be inside the .vscode folder or inside the .code-workspace file. In addition, task and launch configurations can always be defined at the level of a folder, even when you have opened a .code-workspace file.
Refer to tasks and debugging chapters for a more comprehensive overview of how to use tasks and launch configurations in VS Code.
Common questions
What is the benefit of multi-root workspace over a folder?
The most obvious advantage is that a multi-root workspace allows you to work with multiple projects that may not be stored inside the same parent folder on disk. You can pick folders from anywhere to add to the workspace.
Even if you are mainly working in a single-folder-based project, you can benefit from using .code-workspace files. You can store multiple .code-workspace files inside the folder to provide a scoped folder-view of certain aspects of the project depending on the scenario (for example client.code-workspace , server.code-workspace to filter out unrelated folders from the File Explorer). Since .code-workspace files support relative paths for the folders section, these workspace files will work for everyone independent of where the folder is stored.
Finally, if for some projects you want to apply the same set of workspace settings or tasks/launch configurations, consider adding these into a .code-workspace file and add/remove these folders from that workspace.
Why is VS Code restoring all untitled workspaces on a restart?
Untitled workspaces are designed to be something you must explicitly decide to keep or not. The first time an untitled workspace is created, VS Code adds the specified folders into the workspace file and also all existing workspace settings. This user data is always restored and displayed in a VS Code window until the untitled workspace is saved or deleted.
How do I delete an untitled workspace?
You can delete an untitled workspace by closing its window and dismissing the prompt to save the untitled workspace.
Can I use a multi-root workspace without folders
It is possible to leave the folders section of a .code-workspace file empty so that you end up with an instance of VS Code that does not show any root folders. You can still store workspace settings and even tasks or launch configurations in this case.
Does VS Code support projects or solutions?
VS Code doesn't have the concept of a "project" or "solution" as they are sometimes defined in other development tools, for example Visual Studio IDE. You may see the term "project" used in VS Code documentation but it usually means "the thing you're working on". Depending on your programming language or framework, the toolset itself may support something called a "project" to help define build configurations or enumerate included files.
рабочая область — это то, как Visual Studio представляет коллекцию файлов в открытой папкеи представляется IWorkspace типом. Сама по себе Рабочая область не понимает содержимое или функции, связанные с файлами в папке. Вместо этого он предоставляет общий набор интерфейсов API для функций и расширений для создания и использования данных, с которыми могут работать другие пользователи. производители состоят из Managed Extensibility Framework (MEF) с использованием различных атрибутов экспорта.
Поставщики и службы рабочей области
Поставщики рабочих областей и службы предоставляют данные и функции для реагирования на содержимое рабочей области. Они могут предоставлять контекстные сведения о файлах, символы в исходных файлах или функции сборки.
В обоих понятиях используется шаблон фабрики и они импортируются в рамках рабочей области с помощью MEF. Все атрибуты экспорта реализуют IProviderMetadataBase или IWorkspaceServiceFactoryMetadata , но существуют конкретные типы, которые расширения должны использовать для экспортируемых типов.
Одно различие между поставщиками и службами — их связь с рабочей областью. Рабочая область может иметь множество поставщиков определенного типа, но для каждой рабочей области создается только одна служба определенного типа. Например, Рабочая область содержит много поставщиков сканеров файлов, но Рабочая область содержит только одну службу индексирования для каждой рабочей области.
Расширения, напротив, могут получать экземпляры и взаимодействовать напрямую со службами рабочей области. методы расширения IWorkspace доступны для служб, предоставляемых Visual Studio, таких как GetFileWatcherService . Расширение может предоставлять службу рабочей области для компонентов в вашем расширении или для использования другими расширениями. Потребители должны использовать GetServiceAsync или метод расширения, предоставленный для IWorkspace типа.
Не создавайте службы, которые конфликтуют с Visual Studio. Это может привести к непредвиденным проблемам.
Реализация при закрытии рабочей области
При закрытии рабочей области расширителям может потребоваться удалить, но вызвать асинхронный код. IAsyncDisposableИнтерфейс доступен для упрощения написания этого кода.
Связанные типы
-
является центральной сущностью открытой рабочей области, такой как открытая папка. Создает поставщик для каждого экземпляра рабочей области. создает службу для каждой созданной рабочей области. должен быть реализован в поставщиках и службах, которым необходимо выполнять асинхронный код во время реализации. предоставляет вспомогательные методы для доступа к хорошо известным службам или произвольным службам.
Параметры рабочей области
Рабочие области имеют IWorkspaceSettingsManager службу с простым, но мощным контролем над рабочей областью. Основные общие сведения о параметрах см. в разделе Настройка задач сборки и отладки.
Параметры для большинства SettingsType типов — это json файлы, такие как VSWorkspaceSettings.jsв и tasks.vs.js.
Возможности параметров рабочей области изменяются по областям, которые просто являются путями в рабочей области. При вызове потребителя GetAggregatedSettings все области, включающие запрошенный путь и тип параметра, суммируются. Приоритет статистической обработки области выглядит следующим образом:
- «Локальные параметры», обычно это каталог корневого каталога рабочей области .vs .
- Запрошенный путь.
- Родительский каталог запрошенного пути.
- Все последующие родительские каталоги вплоть до корня рабочей области включительно.
- "Глобальные параметры", которые находятся в каталоге пользователя.
Результатом является экземпляр IWorkspaceSettings . Этот объект содержит параметры для конкретного типа и может быть запрошен для настройки имен ключей, хранящихся в string . GetPropertyМетоды и WorkspaceSettingsExtensions методы расширения предполагают, что вызывающий объект знает тип запрашиваемого значения параметра. Так как большинство файлов параметров сохраняются в виде JSON , многие вызовы будут использовать string bool int массивы типов,, и. Также поддерживаются типы объектов. В таких случаях можно использовать себя в IWorkspaceSettings качестве аргумента типа. Пример:
Предполагая, что эти параметры были в VSWorkspaceSettings.js пользователя, доступ к данным можно получить следующим образом:
Эти API параметров не связаны с интерфейсами API, доступными в Microsoft.VisualStudio.Settings пространстве имен. Параметры рабочей области не зависят от узла и используют файлы параметров рабочей области или поставщики динамических параметров.
Предоставление динамических параметров
Расширения могут предоставлять IWorkspaceSettingsProvider s. Эти поставщики в памяти позволяют расширениям добавлять параметры или переопределять другие.
Экспорт отличается IWorkspaceSettingsProvider от других поставщиков рабочих областей. Фабрика не IWorkspaceProviderFactory существует, и отсутствует специальный тип атрибута. Вместо этого реализуйте IWorkspaceSettingsProviderFactory и используйте [Export(typeof(IWorkspaceSettingsProviderFactory))] .
При реализации методов, которые возвращают IWorkspaceSettingsSource (Like IWorkspaceSettingsProvider.GetSingleSettings ), следует возвращать экземпляр, IWorkspaceSettings а не IWorkspaceSettingsSource . IWorkspaceSettings предоставляет дополнительные сведения, которые могут быть полезны при выполнении некоторых агрегатов параметров.
Параметры связанные интерфейсы api
-
операции чтения и агрегирования параметров для рабочей области. Возвращает IWorkspaceSettingsManager для рабочей области. Возвращает параметры для данной области, агрегированной по всем перекрывающимся областям. содержит параметры для определенной области.
Рекомендуемые методики рабочей области
- Возвращают объекты из IWorkspaceProviderFactory.CreateProvider или аналогичных API, которые запоминают Workspace контекст при создании. Интерфейсы поставщиков записываются, ожидая, что этот объект сохраняется при создании.
- Сохранение кэшей или параметров рабочей области в папке "Локальные параметры" рабочей области. создайте путь к файлу с помощью Microsoft.VisualStudio.Workspace.WorkspaceHelper.MakeRootedUnderWorkingFolder Visual Studio 2017 версии 15,6 или более поздней. Для версий, предшествовавших версии 15,6, используйте следующий фрагмент кода:
События и автоматическая загрузка пакетов
Загруженные пакеты могут реализовывать IVsSolutionEvents7 и вызывать IVsSolution.AdviseSolutionEvents . Он включает в себя события для открытия и закрытия папки в Visual Studio.
Контекст пользовательского интерфейса можно использовать для автоматической загрузки пакета. Значение равно 4646B819-1AE0-4E79-97F4-8A8176FDD664 .
Устранение неполадок
Пакет Саурцеексплорерпаккаже не был правильно загружен
Расширяемость рабочей области в значительной степени основана на MEF, а ошибки композиции приведут к сбою загрузки пакета с открытой папкой. Например, если расширение экспортирует тип с ExportFileContextProviderAttribute , но тип реализуется IWorkspaceProviderFactory , то при попытке открыть папку в Visual Studio возникает ошибка.
Сведения об ошибке можно найти в %локалаппдата%\микрософт\висуалстудио\ 15.0_Id \компонентмоделкаче\микрософт.висуалстудио.дефаулт.ЕРР. Устраните все ошибки для типов, реализованных вашим расширением.
Сведения об ошибке можно найти в %локалаппдата%\микрософт\висуалстудио\ 16.0_Id \компонентмоделкаче\микрософт.висуалстудио.дефаулт.ЕРР. Устраните все ошибки для типов, реализованных вашим расширением.
Рабочая область в инструментах R для Visual Studio (RTVS) позволяет указать, где выполняется сеанс R (на локальном и удаленном компьютерах). Цель этого — позволить работать на обоих компьютерах без каких-либо серьезных различий, что дает возможность воспользоваться преимуществами потенциально более производительных облачных компьютеров.
Чтобы открыть окно Рабочие области, выберите команду Инструменты R > Окна > Рабочие области или нажмите клавиши CTRL+9.
В этом окне зеленым флажком обозначается активная рабочая область, к которой привязаны RTVS. Выберите синюю стрелку, чтобы задать рабочую область в качестве активной. Щелкните значок параметров (шестеренки) справа от каждой рабочей области, чтобы переименовать рабочую область, изменить ее расположение и аргументы командной строки. Красный значок X позволяет удалить рабочую область, добавленную вручную.
Сохранение и сброс рабочей области
По умолчанию RTVS не сохраняет состояние рабочей области при закрытии и повторном открытии проекта. Однако это поведение можно изменить в разделе Параметры рабочей области.
Чтобы в любое время сбросить состояние рабочей области, можно воспользоваться командой Инструменты R > Сеанс > Сброс и кнопкой сброса в интерактивном окне. В случае с удаленными рабочими областями сброс приводит к удалению профиля пользователя, созданного при первом подключении к удаленному серверу, что фактически удаляет все накопленные в профиле файлы.
Локальные рабочие области
В списке локальных рабочих областей отображаются все интерпретаторы R, которые установлены на компьютере.
При запуске Visual Studio пытается автоматически определить все установленные версии R, обращаясь к разделу реестра HKEY_LOCAL_MACHINE\Software\R-Core\ . Так как проверка выполняется только при запуске, после установки нового интерпретатора R нужно перезапустить Visual Studio.
RTVS может не обнаружить интерпретатор R, установленный нестандартным способом (например, путем простого копирования файлов в папку вместо запуска установщика). В этом случае вручную создайте новую локальную рабочую область R следующим образом.
- В окне "Рабочие области" нажмите кнопку Добавить.
- Присвойте имя новой рабочей области.
- Введите путь к корневой папке R (в которой находится папка bin с интерпретатором) и любые дополнительные аргументы командной строки, передаваемые интерпретатору при запуске RTVS.
- После завершения щелкните Сохранить.
Удаленные рабочие области
Удаленные рабочие области позволяют подключаться к сеансу R на удаленном компьютере. (Сведения о настройке компьютера для этой цели см. в разделе Настройка удаленных рабочих областей.)
Visual Studio не определяет автоматически удаленные рабочие области, поэтому нужно добавить их вручную с помощью кнопки Добавить в окне "Рабочие области", как описано в предыдущем разделе. В этом случае введите URI удаленного компьютера, а не локальный путь.
Удаленные рабочие области позволяют организовать эффективный предварительный просмотр. Мы работаем над более эффективной синхронизацией файлов, которая будет реализована в будущих выпусках, и с радостью рассмотрим ваши отзывы.
Для входа в удаленную рабочую область необходимо использовать имя пользователя и пароль.
Если удаленный компьютер настроен для использования учетной записи домена, для доступа к удаленной рабочей области можно применять вход в домен. В противном случае следует использовать формат machine-name\username для входа с помощью учетной записи компьютера на удаленном компьютере.
Для входа в учетную запись Linux используйте формат >\username . Например, если имеется учетная запись с именем ruser , введите имя пользователя в форме >\ruser .
Переключение между рабочими областями
RTVS привязывается только к одной рабочей области одновременно. Привязанная рабочая область обозначается в окне "Рабочие области" небольшой зеленой галочкой. По умолчанию RTVS привязывается к последней локальной рабочей области, открытой в предыдущем сеансе.
Чтобы изменить активную рабочую область, щелкните синюю стрелку рядом с требуемой рабочей областью. При этом появится запрос на сохранение сеанса, работа с текущей рабочей областью будет прекращена, а затем вы переключитесь на новую рабочую область.
Чтобы отключить запрос на сохранение, выберите команду Инструменты R > Параметры, а затем задайте для параметра Показать диалоговое окно подтверждения перед переключением рабочих областей значение No . См. раздел Параметры рабочей области.
Переключение на удаленную рабочую область
В зависимости от конфигурации сервера при подключении может появиться предупреждение о сертификате: "Сертификат безопасности, предоставленный удаленными службами R Services, не позволяет нам удостовериться, что вы действительно подключаетесь к компьютеру (имя компьютера)".
Сертификат — это документ, предоставляемый RTVS компьютером, к которому вы пытаетесь подключиться. Сертификат содержит поле, указывающее URI этого компьютера. Предупреждение появляется в случае, когда RTVS обнаруживает несоответствие между URI в сертификате и URI, который используется для подключения к компьютеру, что указывает на потенциальный взлом системы безопасности сервера.
Каталоги на локальных и удаленных компьютерах
По умолчанию при запуске нового интерпретатора R в локальной рабочей области текущим рабочим каталогом становится %userprofile%\Documents. Этот каталог можно в любое время изменить, воспользовавшись командами в меню Инструменты R > Рабочий каталог или щелкнув правой кнопкой мыши проект в обозревателе решений Visual Studio и выбрав команду Задать текущий каталог в качестве рабочего.
При первом подключении к удаленному компьютеру RTVS автоматически создает профиль пользователя на основе учетных данных, при этом рабочим каталогом назначается папка Documents в этом профиле. Она применяется для всех последующих сеансов удаленного доступа, в которых используются те же учетные данные.
В результате точное расположение, где выполняется код, может различаться для локальных и удаленных рабочих областей. В коде используйте только относительные пути к файлам данных и т. п., чтобы код можно было перенести в другие рабочие области.
Обратите внимание, что в удаленных рабочих областях все файлы в рабочем каталоге остаются во всех сеансах для одного профиля пользователя. Как отмечалось ранее, эти файлы можно удалить с помощью команды Инструменты R > Сеанс > Сброс (или кнопки сброса в интерактивном окне) при использовании удаленной рабочей области. Команда удаляет профиль пользователя с сервера, а при повторном подключении он создается заново.
Копирование файлов проекта в удаленные рабочие области
При работе с проектами R в Visual Studio на локальном компьютере всегда имеются актуальные версии файлов проекта, даже при использовании удаленной рабочей области. То есть при открытии проекта в Visual Studio (что обычно означает открытие решения, содержащего проект) RTVS предполагает, что содержимое проекта находится на локальном компьютере. По сути, удаленная рабочая область является только временным хранилищем для файлов проекта и всех выходных данных в коде. Это означает, например, что при загрузке файла с помощью source в интерактивном окне этот файл должен уже находиться на удаленном компьютере по указанному вами пути или в текущем рабочем каталоге удаленного интерпретатора R (задается с помощью функции setwd() ).
Файлы копируются на удаленный сервер следующим образом.
Для удаленной работы с файлами в интерактивном окне их нужно сначала скопировать вручную, щелкнув эти файлы (или проект) правой кнопкой мыши в обозревателе решений и выбрав Использовать выбранные файлы в качестве источника. Отдельные файлы копируются в рабочий каталог на сервере; при копировании проекта RTVS создает папку для проекта.
Также можно скопировать файлы, выделив их в обозревателе решений и выбрав Использовать выбранные файлы в качестве источника. После этого они загружаются в интерактивное окно и выполняются там. Если сеанс подключен к удаленному компьютеру, файлы первым делом копируются туда.
Когда RTVS привязаны к удаленной рабочей области, при нажатии клавиши F5, выборе команды Отладка > Начать отладку или запуске кода иным способом RTVS по умолчанию автоматически копируют файл проекта в удаленную рабочую область (способ управления этим поведением указан ниже).
Все файлы, которые уже существуют на сервере, перезаписываются.
Так как RTVS не обеспечивают надежный перехват всех вызовов функций R, вызов таких функций, как source() или runApp() (для приложений Shiny) из интерактивного окна, не приводит к копированию файлов в удаленную рабочую область.
Настройка того, следует ли RTVS копировать файлы при выполнении проекта, а также точное указание копируемых файлов осуществляются с помощью свойств проекта. Чтобы открыть страницу свойств, выберите команду Проект > Свойства (название проекта) или щелкните проект в обозревателе решений правой кнопкой мыши и выберите Свойства.
Здесь свойство Передать файлы при запуске определяет, следует ли RTVS автоматически копировать файлы проекта. В поле Файлы для передачи указываются типы файлов для передачи. По умолчанию копируются только файлы R, RMD, SQL, MD и CPP Это позволяет избежать случайного копирования на сервер больших файлов данных при каждом выполнении.
Копирование файлов из удаленной рабочей области
Если ваш скрипт R создает файлы на сервере, эти файлы можно скопировать обратно на клиент с помощью функции rtvs::fetch_file . В этой функции необходимо как минимум указать удаленный путь к файлу, который требуется скопировать на компьютер, и при необходимости — целевой путь на вашем компьютере. Если путь не указан, файл копируется в папку %userprofile%\Downloads.
Читайте также: