Как добавить модуль в Visual Studio
Сценарий. У вас установлен модуль, но в среде IDE не отображается интеллектуальное понимание/автозаполнение для этого пользовательского модуля.
Причина: указан неверный путь к исполняемому файлу python.
Решение. Настройте путь к исполняемому файлу python в файле settings.json.
Не забудьте перезапустить VS Code после завершения (это не будет необходимо в будущем выпуске).
Причина: пользовательский модуль расположен в нестандартном месте.
Пользовательский модуль не был установлен с помощью Pip.
Решение. Настройте файл settings.json, чтобы включить это пользовательское местоположение для работы автозаполнения.
Не забудьте перезапустить VS Code после завершения (это не потребуется в будущем выпуске).
Причина: VS Code не был запущен из активной виртуальной среды.
Путь к пользовательским модулям задается при активации виртуальной среды.
Решение. Запустите VS Code из окна терминала/команды с активированной правильной виртуальной средой
1. Intellisense/Автодополнение не работает для пользовательских модулей
Сценарий. У вас установлен модуль, но в среде IDE не отображается интеллектуальное понимание/автозаполнение для этого пользовательского модуля.
Причина: указан неверный путь к исполняемому файлу python.
Решение. Настройте путь к исполняемому файлу python в файле settings.json.
Не забудьте перезапустить VS Code после завершения (это не будет необходимо в будущем выпуске).
Причина: пользовательский модуль расположен в нестандартном месте.
Пользовательский модуль не был установлен с помощью Pip.
Решение. Настройте файл settings.json, чтобы включить это пользовательское местоположение для работы автозаполнения.
Не забудьте перезапустить VS Code после завершения (это не потребуется в будущем выпуске).
Причина: VS Code не был запущен из активной виртуальной среды.
Путь к пользовательским модулям задается при активации виртуальной среды.
Решение. Запустите VS Code из окна терминала/команды с активированной правильной виртуальной средой
Ключевой частью разработки приложений с использованием Visual Basic является тщательное структурирование кода. Это включает сегментацию кода на проекты, модули и процедуры, чтобы его было легко понять и поддерживать.
Полное приложение Visual Basic обычно содержится в одном проекте. Внутри проекта код помещается в отдельные файлы кода, называемые модулями, а внутри каждого модуля код Visual Basic далее разделяется на автономные и повторно используемые процедуры.
Тема проектов рассматривалась в разделе Создание нового проекта Visual Basic. В этой главе мы подробно рассмотрим модули и процедуры Visual Basic.
Модули кода Visual Basic
Исходный код приложения Visual Basic структурирован в виде файлов module с суффиксом .vb. По умолчанию Visual Studio создает отдельный файл модуля для каждой формы в приложении, содержащем код для создания формы. Например, код для создания формы с именем Form1 будет помещен в файл модуля с именем Form1.Designer.vb. Аналогично, любой код, определенный разработчиком для обработки событий от элементов управления в форме, будет помещен Visual Studio в файл модуля с именем Form1.vb.
При написании дополнительного Visual Basic для приложения код в идеале должен быть логически сгруппирован вместе с другим исходным кодом в файле модуля. Когда мы говорим логически сгруппированы, мы имеем в виду, что код должен быть сгруппирован с другим кодом аналогичного характера. Например, код для работы с файлами может быть помещен в модуль с именем FileIO.vb, а все математические процедуры могут находиться в файле с именем Math.vb. Идея состоит в том, чтобы убедиться, что код Visual Basic помещен в файл, где он имеет смысл. Это будет отличаться в зависимости от приложения, но стоит потратить время на то, чтобы код был хорошо структурирован, поскольку это значительно упрощает последующее обслуживание кода вами или другими разработчиками.
Выше мы упоминали, что Visual Studio помещает код для создания каждой формы в отдельные файлы модулей. Теперь нам нужно научиться создавать в проекте новый модуль, содержащий наш собственный код Visual Basic. Начните с создания нового проекта приложения Windows в Visual Studio с именем vbModules. Добавьте в форму два элемента управления TextBox (с именами value1TextBox и value2TextBox) и кнопку (с надписью Calculate), чтобы она выглядела следующим образом:
После открытия нового проекта и отображения первой формы выберите Добавить модуль в меню Проект. Появится окно Добавить элемент с предварительно выбранным элементом Модуль:
Назовите новый модуль Math.vb и нажмите кнопку Добавить. Новый модуль будет добавлен в проект и появится новая вкладка с надписью Math.vb для доступа к коду модуля появляется в области дизайна:
Теперь, когда мы добавили новый модуль в наш проект, следующим шагом будет добавление кода Visual Basic в этот модуль. Однако прежде чем мы сможем это сделать, нам нужно изучить процедуры Visual Basic.
сообщить об этом объявлении
Процедуры кода Visual Basic
- функции. Функции – это процедуры, которые выполняют задачу и возвращают значение по завершении.
- подпрограммы. Подпрограммы – это процедуры, которые выполняют задачу, но не возвращают значения после завершения.
Особенно полезно иметь возможность возвращать значения из функций. Например, функции может потребоваться вернуть результат выполненной задачи (возможно, результат вычисления). Функция также может возвращать значение True или False, чтобы указать, когда задача была выполнена успешно. Затем код Visual Basic, вызвавший функцию, действует на основе возвращаемого значения.
В случае как подпрограмм, так и функций значения (известные как параметры) могут дополнительно передаваться в процедуру.
Определение подпрограмм Visual Basic
Подпрограммы объявляются внутри модулей Visual Basic. Наш недавно созданный модуль в Visual Studio содержит следующее:
Теперь мы собираемся добавить в этот модуль подпрограмму с именем DisplayResult. Синтаксис подпрограммы Visual Basic следующий:
scope Sub subroutineName(parameters)
End Sub
Значение scope равно Private или Public в зависимости от того, должна ли подпрограмма быть доступна из кода Visual Basic за пределами текущего модуля. . Sub — это ключевое слово Visual Basic, указывающее, что это подпрограмма, а не функция. subroutineName — это имя подпрограммы, которое используется при вызове этой конкретной процедуры. Значение parameters позволяет объявить параметры, принимаемые этой подпрограммой (см. ниже).
Ключевое слово Public указывает область. Это определяет, доступна ли эта подпрограмма из кода Visual Basic, находящегося в других модулях. Установка для scope значения Private сделает подпрограмму недоступной для кода Visual Basic за пределами текущего модуля.
Ключевое слово Sub указывает, что это подпрограмма (в отличие от функции) и поэтому не возвращает значение по завершении. Наконец, указывается имя подпрограммы. Круглые скобки используются для хранения любых параметров, которые могут быть переданы подпрограмме при ее вызове. Код End Sub отмечает конец подпрограммы. Код Visual Basic, составляющий подпрограмму, помещается после объявления подпрограммы и End Sub.
Мы можем написать код в подпрограмме для отображения окна сообщения следующим образом:
Затем процедура события Click кнопки в нашей форме должна вызвать подпрограмму DisplayResult(). Дважды щелкните кнопку в форме, чтобы отобразить код процедуры обработки события, и добавьте вызов DisplayResult() следующим образом:
После внесения указанных выше изменений нажмите F5, чтобы собрать и запустить приложение. Когда приложение запущено, нажатие кнопки должно привести к появлению окна сообщения с текстом «Тестовое сообщение».
Передача параметров в функции и подпрограммы
Параметры могут передаваться как в функции, так и в подпрограммы в Visual Basic. Параметры могут передаваться по значению или по ссылке. Когда параметр передается по значению, функция или подпрограмма получает копию данных. Таким образом, изменения данных не влияют на исходный объект или переменную. Однако когда параметры передаются по ссылке, функция или подпрограмма получает указатель на исходную переменную или объект. Таким образом, любые изменения, сделанные в подпрограмме, вносятся непосредственно в исходную переменную или объект. Параметры, которые передаются как value, должны иметь префикс ключевого слова ByValue в объявлении функции или подпрограммы. Однако параметры, передаваемые по ссылке, имеют префикс ключевого слова ByRef. Если ключевое слово не указано, предполагается ByVal.
Параметр также должен быть назван в объявлении подпрограммы или функции вместе с переменной или типом объекта. Например, чтобы адаптировать подпрограмму DisplayResult() для приема параметра Integer, называемого result по значению, и отображения результата в окне сообщения:
В качестве альтернативы можно передать параметр по ссылке:
Просто для полноты измените процедуру события элемента управления Button, чтобы она проходила через строку (обратите внимание, что мы изменим это позже, чтобы передать результат фактического вычисления):
Нажмите F5, чтобы создать и запустить приложение. Теперь в окне сообщения должно отображаться «Результат равен 10».
Определение функций Visual Basic
Функции Visual Basic отличаются от подпрограмм тем, что они возвращают значение. Синтаксис объявления функции следующий:
область Функция имя_функции(параметры) Как тип данных
Значение области действия — Private или Public в зависимости от того, должна ли функция быть доступна из кода Visual Basic за пределами текущего модуля. Function — это ключевое слово Visual Basic, указывающее, что это функция, а не подпрограмма. functionName — это имя функции. parameters позволяет определить параметры, принимаемые этой функцией. Наконец, тип данных определяет тип значения, возвращаемого функцией.
Помня об этом синтаксисе, мы можем создать функцию для нашего приложения, которая будет принимать значения из наших двух текстовых полей в качестве параметров, выполнять вычисления и возвращать результат в виде целого числа:
В приведенной выше функции мы принимаем две строки (value1 и value2) и объявляем целочисленную переменную с именем result для хранения результата вычисления. Затем мы делим значение1 на значение2 и умножаем результат на 100, чтобы получить значение1 в процентах от значения2. Результат присваивается переменной result и затем возвращается коду, вызвавшему функцию.
Последний шаг — изменить нашу процедуру события Click элемента управления Button, чтобы она вызывала функцию PercentageOf(), передавая свойства Text двух наших элементов управления TextBox. Результат, возвращенный этой функцией, затем передается подпрограмме DisplayResult(), где он отображается в окне сообщения:
После внесения указанных выше изменений нажмите F5, чтобы собрать и запустить приложение. Введите 10 в левый элемент управления TextBox, 100 в правый элемент управления TextBox и нажмите кнопку Рассчитать. Появится MessageBox с объявлением, что результат равен 10.

В этом коротком сообщении показано, как установить пакет Python в Visual Studio Code, который широко используется в среде программирования. Обязательным условием для нашей операции является расширение Python в коде Visual Studio, которое необходимо установить в самом начале (Рис. 1).

Рис. 1 расширение Python в Visual Studio Code.
Вы можете выполнить установку по этой ссылке и получить новейшую версию языка Python.
Далее вы можете без проблем начать программировать на Python в Visual Studio Code. Однако кажется, что вы несколько ограничены, когда обнаруживаете, что есть проблемы с установкой внешних библиотек Python и их импортом в Visual Studio Code. Я надеюсь, что это быстрое решение поможет вам справиться с этими проблемами.
Самой большой проблемой на начальном этапе является предполагаемое отсутствие установки Pip в нашем программном обеспечении Visual Studio Code. Pip — самый популярный инструмент для установки пакетов Python, включающий в себя современную версию Python. Он предоставляет основные функции для поиска, загрузки и установки пакетов Python.
В Visual Studio Code Pip, кажется, не распознается как внутренняя или внешняя команда (рис. 2). Обычно мы выбираем самый быстрый способ установки модуля Python, когда после посещения модуля, который мы хотим получить, мы просто делаем копию верхней команды установки, а затем вставляем ее в наше специальное программное обеспечение Python, то есть PyCharm.

Рис. 2 Ошибка «Pip не распознан» в Visual Studio Code.
В коде Visual Studio нам нужно немного изменить нашу команду pip. Правильная команда в нашем терминале должна быть:
После того, как мы нажмем Enter, весь список команд должен быть заполнен, как показано ниже (рис. 3).

Рис. 3 Часть списка команд для Pip в Visual Studio Code.
Теперь мы уверены, что Pip был распознан нашим кодом Visual Studio. Это означает, что можно установить библиотеку Python, и это здорово.
Для корректной установки мы не можем просто сделать копию основной команды доступной чуть ниже названия библиотеки (Рис. 2).
Если бы мы сделали это, то наша команда выглядела бы так:
и нам пришлось бы удалить одну « pip », чтобы между строками не было хотя бы одного пробела, как вы можете видеть здесь.
Я думаю, что гораздо проще просто ввести py-m в нашем пути к терминалу:
а затем добавить команду библиотеки, которую мы хотим установить (Рис. 2)…
После нажатия кнопки «Ввод» вы увидите ход установки. Далее инструмент сообщит вам информацию о целевом пути, по которому была установлена библиотека, а также о новой версии pip, если она доступна (рис. 4).

Рис. 4 Ход установки библиотеки Python в Visual Studio Code.
Чтобы убедиться, что все в порядке, вы можете импортировать библиотеку в файл, над которым работаете, просто набрав:
Если что-то пойдет не так, консоль Python подчеркнет ваш код волнистой красной линией. Поскольку все установлено правильно, библиотека должна мгновенно распознаваться кодом Visual Studio (Рис. 5).

Рис. 5 Библиотека Python успешно импортирована в Visual Studio Code.
Я настоятельно рекомендую использовать Visual Studio Code — лучшее приложение для кодирования на рынке. Самым большим преимуществом является широкая возможность написания кода на различных языках программирования. Это отличное приложение, которое превосходит другие приложения для программирования, предназначенные для определенного языка. В результате экономится много памяти, благодаря чему наши компьютеры работают быстрее.
Вручную установите этот модуль глобально с помощью модуля модуля Puppet:
Прямая загрузка обычно не является способом использования модуля Puppet для управления вашей инфраструктурой, но вы можете загрузить модуль, чтобы проверить код.
Документация
Обзор
Модуль Puppet для управления Microsoft Visual Studio

Описание модуля
Целью этого модуля является установка пакета Microsoft Visual Studio и настройка множества пакетов обновлений, инструментов, утилит и параметров реестра.
Настройка
На что влияют автообновления
- Устанавливает пакеты
- Изменяет ключи реестра
Начиная с автоматического обновления
Установка Visual Studio 2012:
Использование
Классы и определенные типы
Определенный тип: visualstudio
Основное определение этого модуля, он устанавливает и настраивает приложение Visual Studio в системе
Параметры в visualstudio:
обеспечить
Убедитесь, что приложение установлено или нет.
версия
Версия Visual Studio, которую необходимо установить
издание
Выпуск Visual Studio, который необходимо установить
лицензионный_ключ
Лицензионный ключ, соответствующий указанной версии и выпуску. Это необходимо для успешной установки.
компоненты
Список компонентов, инструментов и утилит, которые можно установить как часть установки Visual Studio.
корень_развертывания
Расположение в сети, где находятся пакеты Visual Studio
Ссылка
Определенные типы
Общеопределенные типы
-
: Руководство по базовой установке и настройке Visual Studio.
Ограничения
Этот модуль протестирован на следующих платформах:
Проверено только с версией Puppet для OSS.
Он поддерживает следующие версии Visual Studio:
Разработка
Содействие
Пожалуйста, прочтите CONTRIBUTING.md для получения полной информации об участии в этом проекте.
Все заметные изменения в этом проекте будут задокументированы в этом файле. Каждый новый выпуск обычно также включает в себя последние значения по умолчанию для модуля синхронизации. Это не должно влиять на функциональность модуля.
v4.0.0 (09.05.2020)
Объединенные запросы на вытягивание:
Объединенные запросы на вытягивание:
Объединенные запросы на вытягивание:
v3.0.1 (2017-11-17)
Объединенные запросы на вытягивание:
v3.0.0 (2017-11-17)
Объединенные запросы на вытягивание:
О нас
Puppet помогает предприятиям модернизировать гибридную инфраструктуру, управлять ею и приводить ее в соответствие с требованиями за счет непрерывной автоматизации. Более 40 000 компаний используют Puppet для бесстрашных и открытых инноваций.
Читайте также:
- Как строить чертежи в AutoCad
- Метод частотной декомпозиции в фотошопе шаг за шагом
- Как перенести раздор в другой браузер
- Как установить пароль в браузере
- Как напечатать число на всем листе формата А4 в Word
Как создать для каждого модуля по одной dll в Microsoft Visual Studio 2019
У меня есть проект в нем 6 файлов. При сборке через настройки visual studio создаётся только одна dll. Хотелось бы иметь на каждый файл по одной dll, то есть реализовать систему плагинов. Вопрос:Как создать для каждого модуля по одной dll в Microsoft Visual Studio 2019.
Отслеживать
задан 10 дек 2020 в 10:00
141 7 7 бронзовых знаков
Ну создавайте 6 проектов по одному файлу в каждом.
10 дек 2020 в 10:05
Зачем мне 6 проектов, если на каждый модуль должно быть по одной dll.
10 дек 2020 в 10:29
1 проект -> 1 артефакт сборки, dll в данном случае
10 дек 2020 в 10:35
Это всегда так будет, по другому никак?
10 дек 2020 в 10:41
Извратиться как-нибудь всегда можно, но зачем? Чем вам не нравится несколько проектов? При нормальной разработке вам наверное понадобится не меньше 3 проектов на каждую dll — проект с кодом (статическая или заголовочная библиотека), проект собираемый в dll, проект с тестами собираемый в exe. То бишь 6×3 = 18 проектов.
10 дек 2020 в 10:46
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- c++
- visual-studio
- visual-c++
- dll
- модули
JavaScript и TypeScript в Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Visual Studio 2022 предоставляет обширную поддержку для разработки JavaScript, как с помощью прямого использования JavaScript, также и с помощью языка программирования TypeScript, который разработан, чтобы повышать продуктивность и интерес во время разработки на JavaScript, особенно при разработке масштабных проектов. Код JavaScript или TypeScript в Visual Studio можно написать для многих типов приложений и служб.
Языковая служба JavaScript
Интерфейс JavaScript в Visual Studio 2022 обеспечивается тем же обработчиком, что и поддержка TypeScript. Этот обработчик улучшает поддержку компонентов, функциональность и интеграцию без дополнительной настройки.
Функция восстановления устаревшей языковой службы JavaScript более не доступна. Пользователи сразу получают новую готовую языковую службу JavaScript. Новая языковая служба основана исключительно на языковой службе TypeScript, которая базируется на статическом анализе. Эта служба позволяет нам оптимизировать инструментарий, поэтому ваш код на JavaScript может использовать преимущества расширенной поддержки IntelliSense на основе определений типов. Новая служба имеет небольшой размер и использует меньше памяти, чем устаревшие службы, обеспечивая более высокую производительность пользовательского кода по мере его масштабирования. Также мы улучшили производительность языковой службы для обработки более крупных проектов.
Поддержка TypeScript
По умолчанию Visual Studio 2022 предоставляет языковую поддержку для файлов JavaScript и TypeScript, чтобы IntelliSense можно было использовать без определенной конфигурации проекта.
Для компиляции TypeScript Visual Studio предоставляет гибкие возможности выбора версии TypeScript для каждого отдельного проекта.
В сценариях компиляции MSBuild, таких как ASP.NET Core, пакет NuGet TypeScript — это рекомендуемый метод добавления поддержки компиляции TypeScript в проект. Visual Studio позволит добавить этот пакет при первом добавлении файла TypeScript в проект. К этому пакету также можно получить доступ в любое время с помощью диспетчера пакетов NuGet. При использовании пакета NuGet в проекте будет использоваться соответствующая версия языковой службы для поддержки языка. Примечание. Минимальная поддерживаемая версия этого пакета — 3.6.
Проекты, настроенные для npm, например для проектов Node.js, могут указать собственную версию языковой службы TypeScript, добавив пакет npm TypeScript. В поддерживаемых проектах версию можно указать с помощью диспетчера npm. Примечание. Минимальная поддерживаемая версия этого пакета — 2.1.
TypeScript SDK не рекомендуется использовать в Visual Studio 2022. Существующие проекты, основанные на пакете SDK, должны быть обновлены для использования пакета NuGet. Для проектов, которые не получается обновить сразу, пакет SDK по-прежнему доступен в Visual Studio Marketplace и в качестве дополнительного компонента в установщике Visual Studio.
Для проектов, которые разработаны в Visual Studio 2022, рекомендуется использовать пакеты NuGet и npm TypeScript. Они обеспечивают лучшую переносимость между разными средами и платформами. Дополнительные сведения см. в статьях Компиляция кода TypeScript (ASP.NET Core) и Компиляция кода TypeScript (Node.js).
Шаблоны проектов
Начиная с Visual Studio 2022, существует новый тип проекта JavaScript/TypeScript (.esproj), называемый системой проектов JavaScript (JSPS), который позволяет создавать автономные проекты Angular, React и Vue в Visual Studio. Такие интерфейсные проекты создаются с помощью средств CLI платформы, установленных на локальном компьютере, поэтому версию шаблона вы можете выбрать на свое усмотрение. Сведения о миграции из существующих проектов Node.js в новую систему проектов см. в разделе «Миграция проектов Node.js». Сведения о MSBuild для нового типа проекта см. в свойствах MSBuild для JSPS
В этих новых проектах можно выполнять модульные тесты JavaScript и TypeScript, легко добавлять и подключать проекты на основе API ASP.NET Core и скачивать модули npm с помощью диспетчера npm. Чтобы приступить к работе, ознакомьтесь с краткими руководствами и другой документацией. Дополнительные сведения см. в учебниках по Visual Studio | JavaScript и TypeScript.
Упрощенный обновленный шаблон доступен начиная с Visual Studio 2022 версии 17.5. По сравнению с шаблонами SPA ASP.NET, доступными в Visual Studio, esproj SPA-шаблоны для ASP.NET Core обеспечивают лучшее управление зависимостями npm, а также улучшенную поддержку сборки и публикации.
Visual Studio 2019 предоставляет обширную поддержку для разработки JavaScript, как с помощью прямого использования JavaScript, также и с помощью языка программирования TypeScript, который был разработан с целью повышения продуктивности и интереса во время разработки на JavaScript, особенно при разработке масштабных проектов. Код JavaScript или TypeScript в Visual Studio можно написать для многих типов приложений и служб.
Служба языка JavaScript
Опыт работы с JavaScript в Visual Studio 2019 обеспечивается тем же обработчиком, что и поддержка TypeScript. Это позволяет улучшить поддержку компонентов, функциональность и интеграцию сразу в готовом виде.
Функция восстановления устаревшей языковой службы JavaScript более не доступна. Теперь пользователи сразу получают новую языковую службу JavaScript. Новая языковая служба основана исключительно на языковой службе TypeScript, которая базируется на статическом анализе. Это позволяет нам оптимизировать инструментарий, поэтому ваш код на JavaScript может использовать преимущества расширенной поддержки IntelliSense на основе определений типов. Новая служба имеет небольшой размер и использует меньше памяти, чем устаревшие службы, обеспечивая более высокую производительность пользовательского кода по мере его масштабирования. Также мы улучшили производительность языковой службы для обработки более крупных проектов.
Поддержка TypeScript
Visual Studio 2019 предоставляет несколько вариантов для интеграции компиляции TypeScript в проект.
- Пакет NuGet для TypeScript. Когда в проект устанавливается пакет NuGet или TypeScript 3.2 или более новой версии, в редактор загружается соответствующая версия языковой службы TypeScript.
- Пакет npm для TypeScript. Когда в проект устанавливается пакет npm или TypeScript 2.1 или более новой версии, в редактор загружается соответствующая версия языковой службы TypeScript.
- Также как и стандартный SDK, который можно скачать из VS Marketplace, TypeScript SDK доступен в установщике Visual Studio по умолчанию.
Для проектов, которые разработаны в Visual Studio 2019, рекомендуется использовать пакеты TypeScript NuGet и TypeScript npm. Они обеспечивают лучшую портативность в различных средах и платформах. Дополнительные сведения см. в статьях Компиляция кода TypeScript (ASP.NET Core) и Компиляция кода TypeScript (Node.js).
Проекты
Приложения UWP на JavaScript больше не поддерживаются в Visual Studio 2019. Невозможно создать или открыть проекты UWP на JavaScript (файлы с расширением JSPROJ). Дополнительные сведения см. в документации по созданию прогрессивных веб-приложений (PWA), эффективно работающих на Windows.
Отладка пользовательского кода с помощью функции «Только мой код»
Область применения:
Visual Studio
Visual Studio для Mac
Visual Studio Code
Только мой код — это функция отладки Visual Studio, которая автоматически обходит вызовы системы, платформы и другой непользовательский код. В окне Стек вызовов функция «Только мой код» сворачивает такие вызовы во фреймы [Внешний код] .
«Только мой код» работает по-разному в проектах .NET и C++.
Включение и отключение режима «Только мой код»
Для большинства языков программирования режим «Только мой код» включен по умолчанию.
- Чтобы включить или выключить режим «Только мой код» в Visual Studio, в разделе Инструменты>Параметры (или Отладка>Параметры) >Отладка>Общие установите или снимите флажок Включить только мой код.


Параметр Включить только мой код является глобальным параметром, который применяется ко всем проектам Visual Studio на всех языках.
отладка «Только мой код»
Во время сеанса отладки в окне Модули отображаются модули кода, которые отладчик воспринимает как «Мой код» (т. е. пользовательский код), а также состояние загрузки их символов. Дополнительные сведения см. в разделе Дополнительные сведения о присоединении отладчика к приложению.


В окнах Стек вызовов и Задачи функция «Только мой код» сворачивает непользовательский код в затененный аннотированный фрейм кода, помеченный как [External Code] .


Открывать окна Модули, Стек вызовов и Задачи, как и большинство других окон отладки, можно только в сеансе отладки. В сеансе отладки выберите окна, которые нужно открыть, в разделе Отладка>Окна.
Чтобы просмотреть код в свернутом фрейме [Внешний код] , щелкните правой кнопкой мыши окно Стек вызовов или Задачи и выберите в контекстном меню пункт Показать внешний код. Вместо фрейма [Внешний код] появятся развернутые строки внешнего кода.


Параметр Показать внешний код является текущим пользовательским параметром профилировщика, который применяется ко всем проектам на всех языках, открываемых этим пользователем.
Если дважды щелкнуть строку развернутого внешнего кода в окне Стек вызовов, строка вызывающего кода в исходном коде будет выделена зеленым. Для библиотек DLL или других модулей, которые не найдены или не загружены, может открыться страница, сообщающая, что символ или источник не найден.
«Только мой код» в .NET
В проектах .NET функция «Только мой код» определяет пользовательский и непользовательский код, исходя из файлов символов ( .pdb) и оптимизаций программ. Отладчик .NET считает оптимизированные двоичные файлы и незагруженные файлы .pdb непользовательским кодом.
На то, какой код отладчик посчитает пользовательским, также влияют три следующих атрибута.
- DebuggerNonUserCodeAttribute сообщает отладчику, что код, к которому применен этот атрибут, не является пользовательским.
- DebuggerHiddenAttribute скрывает код от отладчика, даже если режим «Только мой код» включен.
- DebuggerStepThroughAttribute указывает отладчику пошагово пройти через код, к которому применен этот атрибут, а не выполнять шаг с заходом в процедуры.
Весь остальной код отладчик .NET рассматривает как пользовательский.
При отладке в .NET:
- Если выбрать Отладка>Шаг с заходом (или нажать клавишу F11) в непользовательском коде, будет выполнен шаг с обходом процедур и переход на следующую строку пользовательского кода.
- Если выбрать Отладка>Шаг с выходом (или нажать клавиши Shift+F11) в непользовательском коде, будет выполнен переход на следующую строку пользовательского кода.
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
Если отладчик прерывается в непользовательском коде (например, вы выбрали Отладка>Прервать все и приостановили выполнение в непользовательском коде), появляется окно Нет источника. Затем вы можете использовать команду Отладка>Шаг, чтобы перейти к следующей строке пользовательского кода.
При возникновении необработанного исключения в непользовательском коде отладчик прерывается на той строке в пользовательском коде, где было создано исключение.
Если для этого исключения включена первичная обработка исключения, вызывающая строка пользовательского кода в исходном коде выделяется зеленым цветом. В окне Стек вызовов отображается аннотированный фрейм с меткой [Внешний код] .
«Только мой код» в C++
Функция «Только мой код» для пошагового выполнения кода поддерживается начиная с Visual Studio 2017 версии 15.8. Чтобы использовать эту функцию, необходимо включить параметр компилятора /JMC (отладка «Только мой код»). В проектах C++ этот параметр включен по умолчанию. Для окна Стек вызовов и поддержки стека вызовов в режиме «Только мой код» параметр /JMC не требуется.
Чтобы код мог быть классифицирован как пользовательский, отладчик должен загрузить PDB-файл для двоичного файла, содержащего пользовательский код (это можно проверить в окне Модули).
В отношении функционирования стека вызовов, например в окне Стек вызовов, в режиме «Только мой код» в C++ непользовательским кодом считаются только следующие функции.
- Функции с открытой исходной информацией в файле символов.
- Функции, в которых файлы символов указывают, что исходный файл, соответствующий кадру стека, отсутствует.
- Функции, указанные в файлах *.natjmc в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Что касается пошагового выполнения кода, в режиме «Только мой код» в C++ непользовательским кодом считаются только следующие функции.
- Функции, для которых соответствующий PDB-файл не был загружен в отладчик.
- Функции, указанные в файлах *.natjmc в папке %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
Для поддержки пошагового выполнения кода в режиме «Только мой код» код C++ должен быть скомпилирован с использованием компиляторов MSVC в Visual Studio 15.8 предварительной версии 3 или более поздней версии, и должен быть включен параметр компилятора /JMC (он включен по умолчанию). Дополнительные сведения см. в разделе Настройка поведения стека вызовов и пошагового выполнения кода в C++ и в этой записи блога. Если код был скомпилирован с использованием более старого компилятора, файлы .natstepfilter являются единственным способом настройки пошагового выполнения кода, который не зависит от режима «Только мой код». См. раздел Настройка поведения пошагового выполнения кода C++.
При отладке в C++:
- Если выбрать Отладка>Шаг с заходом (или нажать клавишу F11) в непользовательском коде, будет выполнен шаг с обходом процедур и переход на следующую строку пользовательского кода.
- Если выбрать Отладка>Шаг с выходом (или нажать клавиши Shift+F11) в непользовательском коде, будет выполнен переход на следующую строку пользовательского кода.
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
Если отладчик прерывается в непользовательском коде (например, вы выбрали Отладка>Прервать все и приостановили выполнение в непользовательском коде), пошаговое выполнение продолжается в непользовательском коде.
Если отладчик обнаруживает исключение, он останавливается на этом исключении, независимо от того, в каком коде оно находится — пользовательском или непользовательском. Параметры Не обработанные пользователем в диалоговом окне Параметры исключения игнорируются.
Настройка поведения стека вызовов и пошагового выполнения кода в C++
В проектах C++ можно указывать модули, исходные файлы и функции, которые окно Стек вызовов будет считать непользовательским кодом. Для этого нужно указать их в файлах *.natjmc. Эта настройка также применяется к пошаговому выполнению кода, если используется последняя версия компилятора (см. раздел»Только мой код» в C++).
- Чтобы указать непользовательский код для всех пользователей компьютера с Visual Studio, добавьте файл .natjmc в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
- Чтобы указать непользовательский код для отдельного пользователя, добавьте файл .natjmc в папку %USERPROFILE%\My Documents\\Visualizers.
Файл .natjmc является XML-файлом и имеет следующий синтаксис.
Атрибуты элементов модуля
Атрибуты элементов файла
| Атрибут | Описание |
|---|---|
| Name | Обязательный. Полный путь к файлу или файлам исходного кода, который необходимо считать внешним кодом. При задании пути можно использовать следующие подстановочные знаки Windows: ? и * . |
Атрибуты элементов функций
| Атрибут | Описание |
|---|---|
| Name | Обязательный. Полное имя функции, которую необходимо рассматривать как внешний код. |
| Module | Необязательный элемент. Имя модуля или полный путь к модулю, содержащему эту функцию. Этот атрибут можно использовать для устранения неоднозначности функций с одинаковыми именами. |
| ExceptionImplementation | Если задано значение true , стек вызовов отображает функцию, которая создала исключение, а не данную функцию. |
Настройка поведения пошагового выполнения кода в C++ независимо от параметров режима «Только мой код»
В проектах C++ можно указать функции, для которых будут выполняться шаги с обходом, внеся их в файлы *.natstepfilter как непользовательский код. Функции, указанные в файлах *.natstepfilter, не зависят от параметров режима «Только мой код».
- Чтобы указать непользовательский код для всех локальных пользователей Visual Studio, добавьте файл .natstepfilter в папку %VsInstallDirectory%\Common7\Packages\Debugger\Visualizers.
- Чтобы указать непользовательский код для отдельного пользователя, добавьте файл .natstepfilter в папку %USERPROFILE%\My Documents\\Visualizers.
Файл .natstepfilter является XML-файлом и имеет следующий синтаксис.
FunctionSpec StepAction FunctionSpec ModuleSpec StepAction
| Элемент | Описание |
|---|---|
| Function | Обязательный. Указывает одну или несколько функций как функцию, не написанную пользователем. |
| Name | Обязательный. Регулярное выражение в формате ECMA-262, содержащее полное имя функции для сопоставления. Пример: |
«Только мой код» в JavaScript
Режим «Только мой код» в JavaScript управляет пошаговым выполнением и отображением стека вызовов путем распределения кода по одной из следующих классификаций:
| Классификация | Описание |
|---|---|
| MyCode | Код пользователя, которым вы распоряжаетесь и управляете. |
| LibraryCode | Непользовательский код из библиотек, которые вы используете регулярно, и ваше приложение зависит от правильной работы (например, jQuery). |
| UnrelatedCode | Непользовательский код в приложении, который не является вашим и от которого не зависит правильная работа приложения. Например, это может быть рекламный пакет SDK, который отображает рекламу. |
Отладчик JavaScript классифицирует код как пользовательский или непользовательский в следующем порядке.
- Классификации по умолчанию.
- Скрипт, который выполняется путем передачи строки в предоставленную хостом функцию eval , классифицируется как MyCode.
- Скрипт, который выполняется путем передачи строки в конструктор Function , классифицируется как LibraryCode.
- Скрипт в ссылке платформы, например WinJS или SDK Azure, классифицируется как LibraryCode.
- Скрипт, который выполняется путем передачи строки в функцию setTimeout , setImmediate или setInterval , классифицируется как UnrelatedCode.
- Классификации в файле mycode.json текущего проекта.
Каждый шаг классификации переопределяет предыдущие шаги.
Весь остальной код классифицируется как MyCode.
Вы можете изменить классификации по умолчанию и классифицировать определенные файлы и URL-адреса как пользовательский или непользовательский код путем добавления файла .json с именем mycode.json в корневую папку проекта JavaScript. См. раздел Настройка режима «Только мой код» в JavaScript.
При отладке в JavaScript:
- если функция является непользовательским кодом, выбор в меню Отладка>Шаг с заходом (или нажатие клавиши F11) действует так же, как выбор Отладка>Шаг с обходом (или нажатие F10);
- если шаг начинается в непользовательском коде (LibraryCode или UnrelatedCode), пошаговое выполнение временно работает так, как если бы режим «Только мой код» не был включен. После возвращения в пользовательский код пошаговое выполнение в режиме «Только мой код» возобновляется.
- Когда шаг в пользовательском коде приводит к выходу из текущего контекста выполнения, отладчик останавливается в следующей выполненной строке пользовательского кода. Например, если обратный вызов выполняется в коде LibraryCode, отладчик продолжает выполнение, пока не будет выполнена следующая строка кода пользователя.
- Использование пункта Шаг с выходом (или сочетания клавиш Shift+F11) приводит к остановке на следующей строке пользовательского кода.
Если пользовательского кода больше нет, будет продолжена отладка (до завершения или до достижения другой точки останова) либо появится сообщение об ошибке.
В установленные в коде точки останова переход выполняется всегда, но код классифицируется.
- Если ключевое слово debugger обнаруживается в коде LibraryCode, отладчик всегда останавливается.
- Если ключевое слово debugger обнаруживается в коде UnrelatedCode, отладчик не останавливается.
Если необработанное исключение встречается в коде MyCode или LibraryCode, отладчик всегда останавливается.
Если необработанное исключение встречается в коде UnrelatedCode, и MyCode или LibraryCode находится в стеке вызовов, отладчик останавливается.
Если для данного исключения включена первичная обработка и это исключение возникает в коде LibraryCode или UnrelatedCode:
- Если исключение обрабатывается, отладчик не останавливается.
- Если исключение не обрабатывается, отладчик останавливается.
Настройка режима «Только мой код» в JavaScript
Чтобы разделить пользовательский и непользовательский код для отдельного проекта Visual Studio, можно добавить файл .json с именем mycode.json в корневую папку проекта.
В файле mycode.json не нужно перечислять все пары «ключ-значение». Значения MyCode, Libraries и Unrelated могут быть пустыми массивами.
В файлах Mycode.json используется следующий синтаксис.
«Eval», «Function» и «ScriptBlock»
Пары «ключ-значение» Eval, Function иScriptBlock определяют, как классифицируется динамически создаваемый код:
| name | Описание |
|---|---|
| Eval | Скрипт, который выполняется путем передачи строки предоставленной хостом функции eval . По умолчанию скрипт Eval классифицируется как MyCode. |
| Function | Скрипт, который выполняется путем передачи строки конструктору Function . По умолчанию скрипт Function классифицируется как LibraryCode. |
| ScriptBlock | Скрипт, который выполняется путем передачи строки функциям setTimeout , setImmediate или setInterval . По умолчанию скрипт ScriptBlock классифицируется как UnrelatedCode. |
Можно изменить это значение на одно из следующих ключевых слов:
- MyCode классифицирует скрипт как MyCode.
- Library классифицирует скрипт как LibraryCode.
- Unrelated классифицирует скрипт как UnrelatedCode.
«MyCode», «Libraries» и «Unrelated»
Пары «ключ-значение» MyCode, Libraries и Unrelated определяют URL-адреса или файлы, которые нужно включить в классификацию:
| name | Описание |
|---|---|
| MyCode | Массив URL-адресов или файлы, которые классифицируются как MyCode. |
| Libraries | Массив URL-адресов или файлы, которые классифицируются как LibraryCode. |
| Unrelated | Массив URL-адресов или файлы, которые классифицируются как UnrelatedCode. |
Строка URL-адреса или файла может содержать один или несколько символов * , соответствующих любому количеству символов (от 0 и больше). * — то же самое, что и регулярное выражение .* .
