Wie kann ich die Warnung MSB3245 (Referenz konnte nicht auflösen) als Fehler behandeln?

8

Meine Frage basiert auf ein anderes , aber ich möchte das Gegenteil tun : Msbuild anweisen, die Warnung als Fehler zu behandeln, anstatt eine bestimmte msbuild-Warnung zu unterdrücken.

Alles, was ich bisher gesehen habe, besagt jedoch, dass /p:WarningsAsErrors nur csc-Warnungen und -Fehler akzeptiert. Ich habe versucht, einfach die MSB fallen zu lassen und nach der Zahl zu suchen, die dort zur Arbeit gehen könnte, aber kein Glück.

Gibt es eine Möglichkeit, eine Warnung "Assembly reference not found" von msbuild (Befehlszeile) als Fehler zu behandeln?

    
Maslow 05.07.2013, 18:55
quelle

2 Antworten

8

Kürzlich benötigte ich etwas Ähnliches (das auf bestimmte Log-Ereignisse einwirkte), aber ich konnte keine saubere Lösung finden, hauptsächlich weil ich nicht herausgefunden habe, wie ich programmatisch auf die Logger im Msbuild-Prozess zugreifen kann. Ich habe mir das doch ausgedacht, angepasst an dein Problem ist das Prinzip:

  • Installieren Sie einen benutzerdefinierten Logger, der nach der Warnung sucht
  • build
  • setzt ein statisches Flag, wenn die Warnung auftritt
  • Lassen Sie eine benutzerdefinierte Aufgabe überprüfen, ob diese Flagge markiert ist, und melden Sie einen Fehler, wenn sie auf
  • steht

Klingt vielleicht hart, aber der Code ist einfach genug:

%Vor%

Hier ist ein Beispiel für ein msbuild-Skript, das es verwendet:

%Vor%

Und Sie rufen es so auf:

%Vor%

bearbeiten Ich brauchte das nur noch einmal, konnte aber die ursprüngliche DLL, die Projektdatei usw. nicht mehr finden - ich dachte, ich würde nur den Code und die einfachsten Build-Anweisungen in git speichern und bei Bedarf sofort erstellen es ist wahrscheinlich sauberer. Speichern Sie den obigen Code im Grunde in einer Datei customlogger.cs und erstellen Sie ihn dann irgendwo in Ihrem Build-Prozess, bevor Sie msbuild mit dem benutzerdefinierten Logger effektiv aufrufen, indem Sie

verwenden %Vor%

update Als Reaktion auf Kommentare: Ich versuche es heute noch einmal. Ich bin mir nicht sicher, ob der ursprüngliche Code wirklich funktioniert hat (nun ja, für die Beispielnachricht, aber nicht für die eigentliche Warnung MSB3245) Es hakt nur Nachrichtenereignisse, während die ResolveAssemblyReference ein tatsächliches Warnungsereignis ausgibt und außerdem die Warnungsnummer normalerweise nicht in der Nachricht enthalten ist. Dies macht jedoch den Trick:

%Vor%     
stijn 07.07.2013, 20:05
quelle
1

Es scheint, dass die dieser Warnung zugeordnete Nachricht keine Warnung ist:

  

Wenn dieser Verweis von Ihrem Code benötigt wird, können Sie eine Kompilierung erhalten   Fehler

, ist nicht ganz richtig. Wenn der fehlende Verweis ein WPF-Thema ist, erhalten Sie stattdessen einen Laufzeitfehler (System.IO.FileNotFoundException).

Wenn Sie speziell nach MSB3245 suchen, erhalten Sie:

  

CSC: Warnung CS1691: 'MSB3245' ist keine gültige Warnungsnummer

    
Michael J. 21.07.2015 19:55
quelle

Tags und Links