0

Als Teil unserer Erstellung haben wir ein Projekt (.vcxproj), das nur ein Python-Skript mit Custom Build Tool Gebäude, Befehlszeile enthält: $(python_bin)/python.exe %(FullPath). Msbuild in der Lage, Warnungen von diesem Python-Skript zu analysieren und sie nach dem Bauprozess anzuzeigen:Wie werden Warnungen als Fehler für benutzerdefinierte Builds behandelt?

"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) 

jetzt, wie kann ich sie zwingen, diese Warnungen als Fehler zu behandeln? Nur die Option, die ich gefunden habe, ist Treat Linker Warning As Errors, was offensichtlich nicht geholfen hat, da das Verknüpfen bei diesem Projekt nicht erfolgt (da es nur eine .py-Datei mit benutzerdefiniertem Build ist) und diese Warnung sowieso vom Build-Schritt stammt.

Ich habe sogar versucht, <TreatWarningAsError>true</TreatWarningAsError> in ClCompile Abschnitt hinzuzufügen. Hat nicht geholfen.

Wie kann ich erzwingen, dass msbuild diese Warnungen als Fehler behandelt?

+0

Die Compiler-Option ist für C++, aber die Warnungen, die Sie erhalten, ist für Python-Code. – Ajay

+0

Ich dachte mir so viel, ich habe nur versucht, es an ein paar Stellen in .vcxproj zu setzen, um zu sehen, ob es helfen würde. Es tat es nicht. Irgendeine Idee, wie kann ich es als Fehler registrieren lassen? – Paladin

+1

Das ist also eine [Python] -Frage, keine [Visual-C++] -Frage. Sie haben Ihre Frage nicht korrekt markiert. [Just rtfm] (https://docs.python.org/3.1/library/warnings.html), um die Option -W zu finden. –

Antwort

1

Lassen Sie meine von einem Ihrer letzten Kommentare beginnen:

... msbuild erkannt Ausgabe von Python-Skript als Warnungen. aber es könnte auch Bash, Perl, PHP-Skript oder so etwas sein. Msbuild erkennt Ausgabe als Warnung, und ich möchte diese Warnungen als Fehler behandeln. ...

Es gibt keine allgemeinen „drehen Warnungen in Fehler“ für jedes Werkzeug vorstellbar in MSBuild. Wie könnte es sein? Jedes von MSBuild aufgerufene Werkzeug hat, wenn überhaupt, eine Möglichkeit. Der C++ - Compiler und C# -Compiler zum Beispiel haben spezielle Befehlszeilenoptionen, die in ihrer Befehlszeile von den Msbuild-Dateien für diese Sprachen enthalten sind - nichts, was die Kern-Msbuild-Engine tun könnte.

Also, was Sie tun müssen, ist das Werkzeug (Python im Kontext der Frage) zu tun, um dies zu tun, wenn Sie es wollen. Sie können dies tun, indem Sie eine vorhandene/bekannte Eigenschaft (TreatWarningsAsErrors) als Auslöser verwenden. Wenn es einen bestimmten Wert hat (true), dann müssen Sie tun, was Sie tun müssen, damit Ihr Werkzeug Warnungen als Fehler ausgibt und entsprechend handelt.

Beispiel:

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

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

Nun, wenn Sie nicht wissen, wie man genau make Python tun, was Sie wollen (drehen Warnungen in Fehler), gibt es keine msbuild Magie, die helfen können Sie das tun, . Sie plötzlich tun haben eine Python spezifische Frage. Weil das eigentliche Problem, das Sie jetzt haben, nicht damit zusammenhängt, dass Python von innerhalb von Msbuild oder von, sagen wir, der Befehlszeile ausgeführt wird.

Eine zweite Option: Wenn Sie nicht können oder Python gebaut verwenden möchten nicht in der Fähigkeit von Warnungen in Fehler drehen, können Sie auch die Exec -Tasks verwenden CustomErrorRegularExpression -property um einen regulären Ausdruck angeben, die treatet werden soll als "Fehlerausgabe" durch das Tool (python.exe hier).

So etwas wie

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

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

(Ungeprüfte!) Sollten Sie begonnen erhalten.

Da Python jedoch bereits eine Möglichkeit bietet, Warnungen als Fehler zu setzen (über -W error scheint es), scheint diese Option unnötig verschachtelt zu sein. Bitte beachten Sie, dass Sie bei Ihrem Kommentar zu möglichen anderen Tools auch spezifische Kenntnisse über diese anderen Tools benötigen und wie sie ihre Warnungen formatieren (wenn sie überhaupt funktionieren), da Sie eine benutzerdefinierte Regex benötigen. Page 4 für Sie.

Also selbst dieser Ansatz erfordert spezifische Kenntnisse über das Tool, das Sie aufrufen, und nicht so sehr Msbuild.

Ich könnte völlig hier sein und Sie haben wirklich ein anderes Problem, Frage oder Notwendigkeit. Wenn ich die Kommentare zu Ihrer Frage überprüfe, sieht es so aus, als ob ich nicht die einzige bin. Daher müssen Sie vielleicht Ihre Frage ändern oder präzisieren (möglich mit einem Beispiel dessen, was Sie bereits versucht haben), um weitere/bessere Hilfe zu bekommen .

+0

Ist dies funktioniert nur für Warnungen mit 'Warnungen' Modul emittiert? – Paladin

+0

Keine Ahnung ehrlich. Betrachten Sie die Antwort eher als ein Konzept zum Zuordnen einer Msbuild-Eigenschaft zu einem Python-Aufruf. Möglicherweise müssen Sie Ihre Tags anpassen oder eine Python-spezifische Frage nach Python-spezifischen Details stellen. –

+0

Ich glaube nicht, dass meine Frage pythonspezifisch ist – Paladin