0

В рамках нашей сборки у нас есть один проект (.vcxproj), который содержит только один скрипт python с построением Custom Build Tool, командная строка: $(python_bin)/python.exe %(FullPath). MSBuild способен анализировать предупреждение от этого питона сценария и отобразить их после сборки:Как обрабатывать предупреждения как ошибки для пользовательских сборок?

"F:\Generators.vcxproj" (default target) (1) -> 
(CustomBuild target) -> 
    F:\Tool.py(274): warning : OPSEC [F:\Generators.vcxproj] 
    F:\Tool.py(274): warning : OPSEC [F:\Generators.vcxproj] 

    2 Warning(s) 
    0 Error(s) 

сейчас, как я могу заставить его лечить эти предупреждения как ошибки? Единственный вариант, который я нашел, - Treat Linker Warning As Errors, что явно не помогло, так как ссылка на этот проект не была выполнена (так как это всего лишь один .py-файл с пользовательской сборкой), и в любом случае это предупреждение происходит из шага сборки.

Я даже попробовал добавить <TreatWarningAsError>true</TreatWarningAsError> в раздел ClCompile. Не помогло.

Как заставить msbuild обрабатывать эти предупреждения как ошибки?

+0

Компилятор для C++, но предупреждения, которые вы получаете, предназначены для кода Python. – Ajay

+0

Я так много думал, я просто пытался поместить его в несколько мест в .vcxproj, чтобы посмотреть, поможет ли это. Это не так. Любая идея, как я могу заставить его регистрировать его как ошибки? – Paladin

+1

Так что это вопрос [python], а не вопрос [visual-C++]. Вы неправильно пометили свой вопрос. [Just rtfm] (https://docs.python.org/3.1/library/warnings.html), чтобы найти параметр -W. –

ответ

1

Пусть мой начать один из ваших недавних комментариев:

... MSBuild признал вывод питона сценария как предупреждения. но это может быть , а также bash, perl, php script или что-то в этом роде. msbuild распознает вывод как предупреждение, и я хочу обработать эти предупреждения как ошибку . ...

Там нет общего «включить предупреждения в ошибки» для любого инструмента мыслимого в MSBuild. Как это могло быть? Каждый инструмент, вызываемый MSBuild, имеет один из способов сделать это, если вообще. Компилятор C++ и компилятор C#, например, имеют определенные параметры командной строки, которые включены в их командную строку файлами msbuild для этих языков - ничего, что мог бы сделать основной движок msbuild.

Так что вам нужно дать указание инструменту (python в контексте вопроса) сделать это, когда захотите. Вы можете сделать это, используя существующее/хорошо известное свойство (TreatWarningsAsErrors) в качестве триггера. Если оно имеет определенное значение (true), тогда вам нужно сделать все, что вам нужно, чтобы заставить инструмент выдавать предупреждения как ошибки и действовать соответственно.

Пример:

<PropertyGroup> 
    <PythonCmd>$(python_bin)\python.exe</PythonCmd> 
    <PythonCmd Condition="'$(TreatWarningsAsErrors)' == 'true'">$(PythonCmd) -W error</PythonCmd> 
    <PythonCmd>$(PythonCmd) %(FullPath)</PythonCmd> 
</PropertyGroup> 

<Exec Command="$(PythonCmd)" .../> 

Теперь, если вы не знаете, как именно делают питон делать то, что вы хотите (включить предупреждения в ошибки), нет MSBuild магии, которая может помочь вам сделать это , Вы вдруг do имеют конкретный вопрос на python. Поскольку фактическая проблема, которую вы сейчас имеете, не связана с запуском python из msbuild или, скажем, из командной строки.

Второй вариант: если вы не можете или не хотите использовать Python встроенный в возможности превращения предупреждения в ошибки, вы можете также использовать Exec -Tasks CustomErrorRegularExpression -property указать регулярное выражение, которое должно быть treatet как «выход ошибки» с помощью инструмента (здесь python.exe).

Что-то вроде

<PropertyGroup> 
    <ErrorExp>.*: error :.*</ErrorExp> 
    <ErrorExp Condition="'$(TreatWarningsAsErrors)' == 'true'">.*: (warning|error) :.*</ErrorExp> 
</PropertyGroup> 

<Exec ... CustomErrorRegularExpression="$(ErrorExp)"/> 

(непроверенная!) Поможет вам начать.

Однако, поскольку Python уже предоставляет способ для установки предупреждений как ошибок (возможно, через -W error) эта опция излишне запутана.

Опять же, в отношении вашего комментария о потенциальных других используемых инструментах, обратите внимание на то, что вышеупомянутый подход также требует специальных знаний об этих других инструментах и ​​способах их форматирования (если они вообще выполняются), поскольку вам нужно настраивать регулярное выражение для них.

Таким образом, даже этот подход требует определенных знаний об инструменте, который вы вызываете, и не столько msbuild.

Возможно, у меня есть совершенно другая проблема, вопрос или необходимость. Проверяя комментарии к вашему вопросу, похоже, что я не единственный, и тогда вам, возможно, придется изменить свой вопрос или уточнить (возможно, на примере того, что вы уже пробовали), чтобы получить дальнейшую/лучшую помощь ,

+0

Не работает ли это только для предупреждений, испускаемых с помощью модуля 'warnings'? – Paladin

+0

Понятия не имею. Рассмотрим ответ скорее как концепцию о том, как сопоставить свойство msbuild с вызовом Python. Возможно, вам придется настроить теги или задать специфичный для python вопрос, а также конкретные детали Python. –

+0

Я не думаю, что мой вопрос задан python – Paladin

Смежные вопросы