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


Определение пользовательских команд для проектов Python в Visual Studio

При разработке проектов Python вы можете переключиться в командное окно для выполнения определенных скриптов или модулей, выполнения команд pip или использования других средств с кодом. Чтобы улучшить рабочий процесс, можно добавить пользовательские команды в меню проекта Python в Visual Studio. Пользовательские команды Python могут выполняться в окне консоли или в окне вывода Visual Studio. Вы также можете использовать регулярные выражения, чтобы указать Visual Studio, как анализировать ошибки и предупреждения из выходных данных команды.

Необходимые условия

Visual Studio для Mac не поддерживается. Дополнительные сведения см. в статье Что происходит с Visual Studio для Mac? Visual Studio Code в Windows, Mac и Linux хорошо работает с Python с помощью доступных расширений.

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

По умолчанию меню проекта Python содержит две команды: запустить PyLint и запустить Mypy.

снимок экрана, на котором показаны команды по умолчанию в меню проекта Python в Visual Studio 2022.

снимок экрана, на котором показаны команды по умолчанию в меню проекта Python в Visual Studio.

Пользовательские команды 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:

  1. Откройте проект Python в Visual Studio. (При открытии проекта в Visual Studio проект загружается по умолчанию.)

  2. В проводнике решенийкликните правой кнопкой мыши на проекте Python и выберите Выгрузить проект.

    Visual Studio выгрузит проект и открывает соответствующий файл проекта Python (.pyproj) в редакторе.

    Если файл проекта не открыт, щелкните правой кнопкой мыши проект Python и выберите Изменить файл проекта:

  3. Внесите изменения в файл проекта в редакторе Visual Studio и сохраните работу.

  4. В обозревателе решений щелкните правой кнопкой мыши на выгруженный проект и выберите Перезагрузить проект. Если вы пытаетесь перезагрузить проект без сохранения изменений в файле проекта, Visual Studio предложит выполнить действие.

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

снимок экрана, показывающий запрос Visual Studio после обнаружения изменений в файле проекта для открытого проекта.

Выберите перезагрузить или перезагрузить все и Visual Studio сразу же применяет изменения файла проекта к открытому проекту.

Добавление пользовательских команд с помощью файла проекта

В следующей процедуре показано, как создать пользовательскую команду, добавив определение в файл проекта Python (PYPROJ) и перезагрузив проект в Visual Studio. Пользовательская команда запускает файл запуска проекта непосредственно с помощью команды python.exe, которая в основном аналогична использованию режима Отладка>Начать без отладки на главной панели инструментов Visual Studio.

  1. В Visual Studio создайте проект Python с именем Python-CustomCommands с помощью шаблона приложения Python. См. инструкцию в разделе "Быстрый старт: создание проекта Python из шаблона".

    Visual Studio создает проект Python и загружает его в сеанс. Проект можно настроить с помощью файла проекта (.pyproj). Этот файл отображается только в Visual Studio при открытии проекта, но выгрузили. Проект также содержит файл Python (.py) для кода приложения.

  2. Откройте файл приложения Python_CustomCommands.py в редакторе и добавьте следующий код:

    print("Hello custom commands")
    
  3. В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи обратите внимание на команды в контекстном меню. В настоящее время единственными командами в контекстном меню являются запуск PyLint и запуск Mypy. При определении пользовательских команд они также отображаются в этом меню.

  4. Запустите отдельный редактор за пределами сеанса Visual Studio и откройте файл проекта Python (Python-CustomCommands.pyproj) в редакторе. (Не забудьте открыть файл проекта (.pyproj) и не файл приложения Python (.py).)

  5. В файле проекта найдите закрывающий элемент </Project> в конце файла и добавьте следующий XML-код непосредственно перед закрывающим элементом:

    <PropertyGroup>
      <PythonCommands>
        $(PythonCommands);
      </PythonCommands>
    </PropertyGroup>
    
  6. Сохраните изменения файла проекта и вернитесь в Visual Studio. Visual Studio обнаруживает изменения файла проекта и запрашивает действия. В командной строке выберите Перезагрузить, чтобы обновить открытый проект на основе изменений в файле проекта.

  7. В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи проверьте команды в контекстном меню.

    Контекстное меню по-прежнему отображает только команды запуска PyLint и запуска Mypy. Только что добавленный в файл проекта код просто реплицирует группу свойств <PythonCommands> по умолчанию, содержащую команду PyLint. На следующем шаге вы добавите дополнительный код для пользовательской команды.

  8. Перейдите в редактор, в котором обновляется файл проекта. Добавьте следующее определение элемента <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>
    
  9. Замените группу свойств <PythonCommands> (добавленную на шаге , шаг 5) на следующий XML. Этот синтаксис определяет атрибут Name для элемента <Target>, который добавляет пользовательскую команду в контекстное меню Python. Команда содержит метку меню запустить файл запуска.

      <PythonCommands>
        $(PythonCommands);
        Example_RunStartupFile
      </PythonCommands>
    

    Это зависит от контекста - если "tip" относится к кончику чего-либо, то "Кончик" подходит. Но если речь идет о совете, то лучшим переводом будет "Совет".

    Если вы хотите, чтобы пользовательская команда отображалась в контекстном меню перед командами по умолчанию, определенными в маркере $(PythonCommands), поместите синтаксис <Target> для команды перед этим маркером.

  10. Сохраните изменения файла проекта и вернитесь в Visual Studio. При появлении подсказки перезагрузите проект.

  11. В обозревателе решенийщелкните правой кнопкой мыши проект Python, выберите Pythonи повторно проверьте команды в контекстном меню.

    Теперь в меню находится пользовательская команда запуска стартового файла. Если пользовательская команда не отображается, убедитесь, что вы добавили значение атрибута Name для элемента <Target> в элемент <PythonCommands>, как описано на шаге 9. Также ознакомьтесь с рекомендациями, перечисленными в разделе Устранение неполадок далее в этой статье.

  12. Выберите команду Запустить файл запуска. Откроется окно консоли и отображается текст Hello пользовательские команды, а затем нажмите любую клавишу, чтобы продолжить. Подтвердите выходные данные и закройте окно консоли.

    Заметка

    Настраиваемый скрипт команд выполняется в активированной среде для проекта Python.

  13. Перейдите в редактор с файлом проекта. В определении элемента <Target> (добавленном шаге 8), измените значение атрибута ExecuteIn на output.

      <CreatePythonCommandItem
        ...
        ExecuteIn="output">
        ...
      </CreatePythonCommandItem>
    
  14. Сохраните изменения, переключитесь на Visual Studio и перезагрузите проект.

  15. Выберите еще раз команду запуска файла настроек из контекстного меню Python. Теперь выходные данные программы отображаются в окне вывода Visual Studio, а не в окне консоли:

  16. Чтобы добавить дополнительные пользовательские команды, выполните следующий процесс:

    1. Определите подходящий элемент <Target> для пользовательской команды в файле проекта.

    2. Добавьте значение атрибута Name для элемента <Target> в группу свойств <PythonCommands>.

    3. Сохраните изменения в файле проекта.

    4. Перезагрузите проект в 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="&quot;--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]&quot; -r n @(Compile, ' ')"
                           WorkingDirectory="$(MSBuildProjectDirectory)"
                           ExecuteIn="output"
                           RequiredPackages="pylint&gt;=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 &quot;$(InstallerTitle)&quot; --dist-dir=&quot;$(DistributionOutputDir)&quot;"
        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=&quot;$(DistributionOutputDir)&quot;"
      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.