Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При разработке проектов Python вы можете переключиться в командное окно для выполнения определенных скриптов или модулей, выполнения команд pip или использования других средств с кодом. Чтобы улучшить рабочий процесс, можно добавить пользовательские команды в меню проекта Python в Visual Studio. Пользовательские команды Python могут выполняться в окне консоли или в окне вывода Visual Studio. Вы также можете использовать регулярные выражения, чтобы указать Visual Studio, как анализировать ошибки и предупреждения из выходных данных команды.
Необходимые условия
- Visual Studio на Windows, установленный с поддержкой загрузок для Python. Дополнительные сведения см. в статье Установка поддержки Python в Visual Studio.
Visual Studio для Mac не поддерживается. Дополнительные сведения см. в статье Что происходит с Visual Studio для Mac? Visual Studio Code в Windows, Mac и Linux хорошо работает с Python с помощью доступных расширений.
Изучение пользовательских команд
По умолчанию меню проекта Python содержит две команды: запустить PyLint и запустить Mypy.
Пользовательские команды Python, которые вы определите, появятся в этом же меню. Пользовательская команда может ссылаться на файл Python, модуль Python, встроенный код Python, произвольный исполняемый файл или команду pip. Вы также можете указать, как и где выполняется команда.
Можно добавлять пользовательские команды несколькими способами:
Определите пользовательские команды в файле проекта Python (.pyproj) напрямую. Эти команды применяются к конкретному проекту.
Определите пользовательские команды в файле целевых объектов (.targets). Команды в этом файле можно легко импортировать, чтобы использовать их с несколькими проектами.
Создайте проект Python из шаблона проекта в Visual Studio, который определяет пользовательские команды Python.
Некоторые шаблоны проектов Python в Visual Studio добавляют пользовательские команды с помощью файла targets. Шаблоны веб-проектов Bottle и Flask добавляют две команды: запустить сервер и запустить сервер отладки. Шаблон веб-проекта Django добавляет следующие команды и несколько других:
Перезагрузите проект для доступа к пользовательским командам
При открытии проекта в Visual Studio при внесении изменений в соответствующий файл проекта в редакторе необходимо перезагрузить проект, чтобы применить изменения. Аналогичным образом, после определения пользовательских команд Python в файле проекта Python необходимо перезагрузить проект Python, чтобы команды отображались в меню проекта Python. При изменении пользовательских команд, определенных в целевом файле, необходимо перестроить полное решение Visual Studio для любого проекта, который импортирует этот целевой файл.
Распространенный подход заключается в внесении изменений в файл проекта Python непосредственно в Visual Studio:
Откройте проект Python в Visual Studio. (При открытии проекта в Visual Studio проект загружается по умолчанию.)
В проводнике решенийкликните правой кнопкой мыши на проекте Python и выберите Выгрузить проект.
Visual Studio выгрузит проект и открывает соответствующий файл проекта Python (.pyproj) в редакторе.
Если файл проекта не открыт, щелкните правой кнопкой мыши проект Python и выберите Изменить файл проекта:
Внесите изменения в файл проекта в редакторе Visual Studio и сохраните работу.
В обозревателе решений щелкните правой кнопкой мыши на выгруженный проект и выберите Перезагрузить проект. Если вы пытаетесь перезагрузить проект без сохранения изменений в файле проекта, Visual Studio предложит выполнить действие.
Процесс выгрузки-редактирования-сохранения-перезагрузки может стать утомительным при разработке пользовательских команд. Более эффективный рабочий процесс включает одновременную загрузку проекта в Visual Studio и открытие файла проекта Python в отдельном редакторе. Вы можете использовать любой редактор, например другой экземпляр Visual Studio, Visual Studio Code, Блокнот и т. д. После сохранения изменений в редакторе и переключения на Visual Studio Visual Studio обнаруживает изменения файла проекта для открытого проекта и запрашивает выполнение действий:
Выберите перезагрузить или перезагрузить все и Visual Studio сразу же применяет изменения файла проекта к открытому проекту.
Добавление пользовательских команд с помощью файла проекта
В следующей процедуре показано, как создать пользовательскую команду, добавив определение в файл проекта Python (PYPROJ) и перезагрузив проект в Visual Studio. Пользовательская команда запускает файл запуска проекта непосредственно с помощью команды python.exe
, которая в основном аналогична использованию режима Отладка>Начать без отладки на главной панели инструментов Visual Studio.
В Visual Studio создайте проект Python с именем Python-CustomCommands с помощью шаблона приложения Python. См. инструкцию в разделе "Быстрый старт: создание проекта Python из шаблона".
Visual Studio создает проект Python и загружает его в сеанс. Проект можно настроить с помощью файла проекта (.pyproj). Этот файл отображается только в Visual Studio при открытии проекта, но выгрузили. Проект также содержит файл Python (.py) для кода приложения.
Откройте файл приложения Python_CustomCommands.py в редакторе и добавьте следующий код:
print("Hello custom commands")
В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи обратите внимание на команды в контекстном меню. В настоящее время единственными командами в контекстном меню являются запуск PyLint и запуск Mypy. При определении пользовательских команд они также отображаются в этом меню.
Запустите отдельный редактор за пределами сеанса Visual Studio и откройте файл проекта Python (Python-CustomCommands.pyproj) в редакторе. (Не забудьте открыть файл проекта (.pyproj) и не файл приложения Python (.py).)
В файле проекта найдите закрывающий элемент
</Project>
в конце файла и добавьте следующий XML-код непосредственно перед закрывающим элементом:<PropertyGroup> <PythonCommands> $(PythonCommands); </PythonCommands> </PropertyGroup>
Сохраните изменения файла проекта и вернитесь в Visual Studio. Visual Studio обнаруживает изменения файла проекта и запрашивает действия. В командной строке выберите Перезагрузить, чтобы обновить открытый проект на основе изменений в файле проекта.
В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи проверьте команды в контекстном меню.
Контекстное меню по-прежнему отображает только команды запуска PyLint и запуска Mypy. Только что добавленный в файл проекта код просто реплицирует группу свойств
<PythonCommands>
по умолчанию, содержащую команду PyLint. На следующем шаге вы добавите дополнительный код для пользовательской команды.Перейдите в редактор, в котором обновляется файл проекта. Добавьте следующее определение элемента
<Target>
в элементе<Project>
. Вы можете разместить определение<Target>
до или после определения<PropertyGroup>
, описанного ранее.Этот элемент
<Target>
определяет пользовательскую команду для запуска файла запуска проекта (определяемого свойством StartupFile) с помощью командыpython.exe
в окне консоли. Определение атрибутаExecuteIn="consolepause"
использует консоль, которая ожидает выбора ключа, чтобы закрыть окно консоли.<Target Name="Example_RunStartupFile" Label="Run startup file" Returns="@(Commands)"> <CreatePythonCommandItem TargetType="script" Target="$(StartupFile)" Arguments="" WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="consolepause"> <Output TaskParameter="Command" ItemName="Commands" /> </CreatePythonCommandItem> </Target>
Замените группу свойств
<PythonCommands>
(добавленную на шаге , шаг 5) на следующий XML. Этот синтаксис определяет атрибутName
для элемента<Target>
, который добавляет пользовательскую команду в контекстное меню Python. Команда содержит метку меню запустить файл запуска.<PythonCommands> $(PythonCommands); Example_RunStartupFile </PythonCommands>
Это зависит от контекста - если "tip" относится к кончику чего-либо, то "Кончик" подходит. Но если речь идет о совете, то лучшим переводом будет "Совет".
Если вы хотите, чтобы пользовательская команда отображалась в контекстном меню перед командами по умолчанию, определенными в маркере
$(PythonCommands)
, поместите синтаксис<Target>
для команды перед этим маркером.Сохраните изменения файла проекта и вернитесь в Visual Studio. При появлении подсказки перезагрузите проект.
В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи повторно проверьте команды в контекстном меню.
Теперь в меню находится пользовательская команда запуска стартового файла. Если пользовательская команда не отображается, убедитесь, что вы добавили значение атрибута
Name
для элемента<Target>
в элемент<PythonCommands>
, как описано на шаге 9. Также ознакомьтесь с рекомендациями, перечисленными в разделе Устранение неполадок далее в этой статье.Выберите команду Запустить файл запуска. Откроется окно консоли и отображается текст Hello пользовательские команды, а затем нажмите любую клавишу, чтобы продолжить. Подтвердите выходные данные и закройте окно консоли.
Заметка
Настраиваемый скрипт команд выполняется в активированной среде для проекта Python.
Перейдите в редактор с файлом проекта. В определении элемента
<Target>
(добавленном шаге 8), измените значение атрибутаExecuteIn
наoutput
.<CreatePythonCommandItem ... ExecuteIn="output"> ... </CreatePythonCommandItem>
Сохраните изменения, переключитесь на Visual Studio и перезагрузите проект.
Выберите еще раз команду запуска файла настроек из контекстного меню Python. Теперь выходные данные программы отображаются в окне вывода Visual Studio, а не в окне консоли:
Чтобы добавить дополнительные пользовательские команды, выполните следующий процесс:
Определите подходящий элемент
<Target>
для пользовательской команды в файле проекта.Добавьте значение атрибута
Name
для элемента<Target>
в группу свойств<PythonCommands>
.Сохраните изменения в файле проекта.
Перезагрузите проект в Visual Studio.
Использование свойств проекта
Чтобы ссылаться на свойства проекта или переменные среды в значениях атрибутов элемента <Target>
, используйте имя свойства в токене $()
, например $(StartupFile)
и $(MSBuildProjectDirectory)
. Дополнительные сведения см. в разделе свойства MSBuild.
Если вы вызываете команду, например ($StartupFile)
, которая использует свойства проекта, такие как свойство StartupFile, и команда завершается ошибкой, так как маркер не определен, Visual Studio отключает команду, пока не перезагрузите проект. При внесении изменений в проект, который изменяет определение свойства, изменения не обновляют состояние связанной команды. В этом случае необходимо перезагрузить проект.
Изучите структуру элемента <Target>
Вы определяете сведения для пользовательской команды с помощью элемента <Target>
. Общая форма элемента <Target>
показана в следующем псевдокоде:
<Target Name="Name1" Label="Display Name" Returns="@(Commands)">
<CreatePythonCommandItem Target="filename, module name, or code"
TargetType="executable/script/module/code/pip"
Arguments="..."
ExecuteIn="console/consolepause/output/repl[:Display name]/none"
WorkingDirectory="..."
ErrorRegex="..."
WarningRegex="..."
RequiredPackages="...;..."
Environment="...">
<!-- Output always appears in this form, with these exact attributes -->
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Целевые атрибуты
В следующей таблице перечислены атрибуты элемента <Target>
.
Атрибут | Обязательно | Описание |
---|---|---|
Name |
Да | Идентификатор команды в проекте Visual Studio. Это имя необходимо добавить в группу свойств <PythonCommands> , чтобы команда отображалась в контекстном меню Python. |
Label |
Да | Отображаемое имя пользовательского интерфейса, которое отображается в контекстном меню Python. |
Returns |
Да | Возвращаемые сведения, которые должны содержать маркер @(Commands) , определяющий цель как команду. |
Атрибуты CreatePythonCommandItem
Элемент <Target>
содержит элементы <CreatePythonCommandItem>
и <Output>
, определяющие подробное поведение пользовательской команды. В следующей таблице перечислены доступные атрибуты элемента <CreatePythonCommandItem>
. Все значения атрибутов регистронезависимы.
Attribute |
Обязательно | Описание |
---|---|---|
TargetType |
Да | Указывает, что содержит атрибут Target и как используется значение вместе с атрибутом Arguments : - executable : запустите исполняемый файл с именем в атрибуте Target , добавляя значение в атрибут Arguments , как если бы он был введен непосредственно в командной строке. Значение должно содержать только имя программы без аргументов. - script : выполните команду python.exe с именем файла в атрибуте Target , а затем значение в атрибуте Arguments . - module : выполните команду python -m , за которой следует имя модуля в атрибуте Target , а затем значение в атрибуте Arguments . - code : запустите встроенный код, содержащийся в атрибуте Target . Игнорировать значение атрибута Arguments . - pip : выполните pip с помощью команды в атрибуте Target , а затем значение в атрибуте Arguments . Если для атрибута ExecuteIn задано значение output , pip предполагает, что запрос выполняет команду install и использует атрибут Target в качестве имени пакета. |
Target |
Да | Указывает имя файла, имя модуля, код или команду pip, используемую в зависимости от значения атрибута TargetType . |
Arguments |
Необязательный | Предоставляет строку аргументов (при наличии) для использования с атрибутом Target . — Когда значение атрибута TargetType равно script , значение Arguments предоставляется программе Python вместо команды python.exe . — Когда значение атрибута TargetType является code , соответствующее значение Arguments игнорируется. |
ExecuteIn |
Да | Указывает среду, в которой выполняется команда: - console : (по умолчанию) запускает атрибут Target со значением Arguments , как если бы они вводились непосредственно в командной строке. Пока выполняется атрибут Target , откроется командное окно и закрывается автоматически. - consolepause : то же поведение, что и console , но ожидает нажатия клавиши перед закрытием окна. - output : запускает атрибут Target и отображает результаты в окне вывода Visual Studio. Если атрибут TargetType имеет значение pip , Visual Studio использует атрибут Target как имя пакета и добавляет значение атрибута Arguments . - repl : запускает атрибут Target в интерактивном окне Python. Необязательное отображаемое имя используется для заголовка окна. - none : то же поведение, что и console . |
WorkingDirectory |
Необязательный | Определяет папку, в которой выполняется команда. |
ErrorRegex WarningRegEx |
Необязательный | Используется только в том случае, если для атрибута ExecuteIn задано значение output . Оба значения атрибута указывают регулярное выражение, которое Visual Studio использует для анализа выходных данных команды и отображения ошибок и предупреждений в окне списка ошибок. Если эти атрибуты не указаны, команда не влияет на окно списка ошибок. Дополнительные сведения о том, что ожидает Visual Studio, см. раздел Именованные группы захвата. |
RequiredPackages |
Необязательный | Предоставляет список требований к пакету для команды, используя тот же формат, что и файл requirements.txt (pip.readthedocs.io). Например, команда Run PyLint указывает формат pylint>=1.0.0 . Перед выполнением команды Visual Studio подтверждает установку всех пакетов в списке. Visual Studio использует pip для установки отсутствующих пакетов. |
Environment |
Необязательный | Определяет строку переменных среды для определения перед выполнением команды. Каждая переменная использует форму \<NAME>=\<VALUE> с несколькими переменными, разделенными точкой с запятой. Переменная с несколькими значениями должна содержаться в одинарных или двойных кавычках, как в 'NAME=VALUE1;VALUE2' . |
Именованные группы записи для регулярных выражений
Когда Visual Studio анализирует ошибки и предупреждения из пользовательских выходных данных команд, он ожидает, что в значениях атрибутов ErrorRegex
и WarningRegex
регулярные выражения будут использовать следующие именованные группы:
-
(?<message>...)
: текст ошибки. -
(?<code>...)
: значение кода ошибки. -
(?<filename>...)
: имя файла, для которого сообщается ошибка. -
(?<line>...)
: номер строки в файле, для которого сообщается об ошибке. -
(?<column>...)
: номер столбца расположения в файле, для которого сообщается ошибка.
Например, PyLint выдает предупреждения следующей формы:
************* Module hello
C: 1, 0: Missing module docstring (missing-docstring)
Чтобы разрешить Visual Studio извлекать нужные сведения из этих предупреждений и отображать их в окне списка ошибок WarningRegex
, значение атрибута WarningRegex
для команды run Pylint выглядит следующим образом:
^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]
Заметка
Синтаксис msg_id
в значении атрибута WarningRegex
должен быть действительно code
, как описано в проблеме 3680.
Импорт пользовательских команд с помощью целевого файла
Если вы определяете пользовательские команды в файле проекта Python, команды доступны только для этого конкретного проекта. Если вы хотите создать пользовательские команды и использовать их в нескольких проектах, можно определить группу свойств <PythonCommands>
со всеми элементами <Target>
в целевом файле (.targets) и импортировать этот файл в проекты Python.
Файл целевых объектов использует тот же формат и синтаксис для определения пользовательских команд, как описано в файле проекта Python (.pyproj). Общие элементы для настройки включают
<PythonCommands>
,<Target>
,<CreatePythonCommandItem>
и<Output>
:<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <PythonCommands> $(PythonCommands); <!-- Additional command names --> </PythonCommands> </PropertyGroup> <Target Name="..." Label="..." Returns="@(Commands)"> <!-- CreatePythonCommandItem and Output elements... --> </Target> <!-- Any number of additional Target elements--> </Project>
Чтобы импортировать целевой файл в проект, добавьте элемент
<Import Project="(path)">
в любом месте элемента<Project>
в файле проекта.Например, если у вас есть файл проекта с именем CustomCommands.targets в папке целевых объектов в проекте Python, добавьте следующий код в файл проекта:
<Import Project="targets/CustomCommands.targets"/>
Если файл проекта импортирует файл целей, и вы вносите изменения в этот файл, пока проект открыт в Visual Studio, необходимо перестроить решение Visual Studio , содержащее проект, а не только сам проект.
Примеры команд
В следующих разделах приведен пример кода, который можно использовать для определения пользовательских команд для проектов Python.
Запуск PyLint (целевой объект модуля)
Следующий код приведен в файле Microsoft.PythonTools.targets:
<PropertyGroup>
<PythonCommands>$(PythonCommands);PythonRunPyLintCommand</PythonCommands>
<PyLintWarningRegex>
<![CDATA[^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]>
</PyLintWarningRegex>
</PropertyGroup>
<Target Name="PythonRunPyLintCommand"
Label="resource:Microsoft.PythonTools.Common;Microsoft.PythonTools.Common.Strings;RunPyLintLabel"
Returns="@(Commands)">
<CreatePythonCommandItem Target="pylint.lint"
TargetType="module"
Arguments=""--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]" -r n @(Compile, ' ')"
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="output"
RequiredPackages="pylint>=1.0.0"
WarningRegex="$(PyLintWarningRegex)">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Запуск установки pip с определенным пакетом (целевой объект pip)
Следующая команда выполняет команду pip install my-package
в окне вывода Visual Studio . Вы можете использовать следующую команду при разработке пакета и тестировании его установки. Элемент <Target>
содержит имя пакета, а не команду install
, которая предполагается при использовании определения атрибута ExecuteIn="output"
.
<PropertyGroup>
<PythonCommands>$(PythonCommands);InstallMyPackage</PythonCommands>
</PropertyGroup>
<Target Name="InstallMyPackage" Label="pip install my-package" Returns="@(Commands)">
<CreatePythonCommandItem Target="my-package" TargetType="pip" Arguments=""
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Отображение устаревших пакетов pip (целевой объект pip)
Следующая команда запускает pip с функцией list
для идентификации устаревших пакетов pip:
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowOutdatedPackages</PythonCommands>
</PropertyGroup>
<Target Name="ShowOutdatedPackages" Label="Show outdated pip packages" Returns="@(Commands)">
<CreatePythonCommandItem Target="list" TargetType="pip" Arguments="-o --format columns"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="consolepause">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Запуск исполняемого файла с остановкой консоли
Следующая команда запускает функцию where
для отображения расположения файлов Python, начиная с папки проекта:
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowAllPythonFilesInProject</PythonCommands>
</PropertyGroup>
<Target Name="ShowAllPythonFilesInProject" Label="Show Python files in project" Returns="@(Commands)">
<CreatePythonCommandItem Target="where" TargetType="executable" Arguments="/r . *.py"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Запуск сервера и выполнение команд сервера отладки
Чтобы узнать, как определяются команды Start server и Start debug server для веб-проектов, изучите репозиторий Microsoft.PythonTools.Web.targets на сайте GitHub.
Установка пакета для разработки
Следующий код запускает pip для установки пакетов:
<PropertyGroup>
<PythonCommands>PipInstallDevCommand;$(PythonCommands);</PythonCommands>
</PropertyGroup>
<Target Name="PipInstallDevCommand" Label="Install package for development" Returns="@(Commands)">
<CreatePythonCommandItem Target="pip" TargetType="module" Arguments="install --editable $(ProjectDir)"
WorkingDirectory="$(WorkingDirectory)" ExecuteIn="Repl:Install package for development">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
From fxthomas/Example.pyproj.xml (GitHub), используется с разрешения.
Создание установщика Windows
Следующий скрипт создает установщик Windows:
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWinInstCommand;</PythonCommands>
</PropertyGroup>
<Target Name="BdistWinInstCommand" Label="Generate Windows Installer" Returns="@(Commands)">
<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"
Arguments="bdist_wininst --user-access-control=force --title "$(InstallerTitle)" --dist-dir="$(DistributionOutputDir)""
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="setuptools"
ExecuteIn="Repl:Generate Windows Installer">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
От fxthomas /Example.pyproj.xml (GitHub), используется с разрешением.
Создание пакета колес Python
Следующий скрипт создает пакет для Python wheel:
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWheelCommand;</PythonCommands>
</PropertyGroup>
<Target Name="BdistWheelCommand" Label="Generate Wheel Package" Returns="@(Commands)">
<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"
Arguments="bdist_wheel --dist-dir="$(DistributionOutputDir)""
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="wheel;setuptools"
ExecuteIn="Repl:Generate Wheel Package">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
От fxthomas/Example.pyproj.xml (GitHub), используемый с разрешением.
Устранение неполадок с пользовательскими командами
Ознакомьтесь со следующими разделами о возможных проблемах, связанных с работой с пользовательскими командами.
Файл проекта не загружен
Это сообщение об ошибке указывает на наличие синтаксической ошибки в файле проекта. Сообщение содержит конкретную ошибку с номером строки и положением символов.
Окно консоли закрывается после выполнения команды
Если окно консоли закрывается сразу после выполнения команды, используйте определение атрибута ExecuteIn="consolepause"
вместо ExecuteIn="console"
.
Команда, отсутствуюющая в меню
Если вы не видите настраиваемую команду в контекстном меню Python, проверьте следующие элементы:
- Убедитесь, что команда включена в группу свойств
<PythonCommands>
. - Убедитесь, что имя команды, указанное в списке команд, соответствует имени, указанному в элементе
<Target>
.
Вот пример. В следующем фрагменте XML имя Example
в группе свойств <PythonCommands>
не соответствует имени ExampleCommand
в определении элемента <Target>
. Visual Studio не находит команду с именем Example
, поэтому команда не отображается. Либо используйте ExampleCommand
в списке команд, либо измените имя целевого объекта на Example
.
<PropertyGroup>
<PythonCommands>$(PythonCommands);Example</PythonCommands>
</PropertyGroup>
<Target Name="ExampleCommand" Label="Example Command" Returns="@(Commands)">
<!-- ... -->
</Target>
Ошибка при выполнении команды, не удалось получить целевой объект команды
Это сообщение об ошибке указывает, что содержимое <Target>
или <CreatePythonCommandItem>
элементов неверно.
Ниже приведены некоторые возможные причины этой ошибки:
- Обязательный атрибут элемента
<Target>
пуст. - Обязательный
TargetType
атрибут пуст или содержит нераспознанное значение. - Обязательный
ExecuteIn
атрибут пуст или содержит нераспознанное значение. - Атрибут
ErrorRegex
илиWarningRegex
указан без задания определения атрибутаExecuteIn="output"
. - Нераспознанные атрибуты существуют в элементе. Например, ссылка на атрибут может быть написана с ошибкой как
Argumnets
вместоArguments
.
Значения атрибутов могут быть пустыми, если вы ссылаетесь на свойство, которое не определено. Если вы используете токен $(StartupFile)
, но в проекте не определен файл запуска, токен заменяется на пустую строку. В таких случаях может потребоваться определить значение по умолчанию. Например, команды сервера запуска запуска и запуска сервера отладки, определенные в шаблонах проектов Bottle, Flask и Django, используют файл manage.py по умолчанию (если файл запуска сервера не указан в свойствах проекта).
Visual Studio перестает отвечать, завершается сбоем
Если Visual Studio перестает отвечать и завершает работу при выполнении пользовательской команды, скорее всего, вы пытаетесь выполнить команду консоли с определением атрибута ExecuteIn="output"
. В таких случаях Visual Studio может завершиться сбоем при попытке проанализировать выходные данные. Чтобы избежать этого условия, используйте вместо этого определение атрибута ExecuteIn="console"
. Дополнительные сведения см. в выпуске 3681.
Команда не распознана как операбловый или пакетный файл
При установке определения атрибута TargetType="executable"
значение в атрибуте Target
должно быть только имени программы без каких-либо аргументов, таких как только python
или python.exe
. В этом случае переместите все аргументы в атрибут Arguments
.