Was ist der Standardspeicherort für MSBuild-Protokolle?

101

Ich verwende Visual Studio Express 2012. Wo befindet sich der Speicherort der Protokolldatei? Ich habe in dem Ordner gesucht, in dem meine Lösung und meine Projekte gespeichert sind, kann jedoch keine .log-Datei finden.

Dies ist die Konfiguration für die Protokollierung:

Geben Sie hier die Bildbeschreibung ein

Hanxue
quelle
1
Es gibt keine Standard-Log-Datei. Schauen Sie in das Ausgabefenster.
Hans Passant
13
@Hans, In meinem Fall enthält das Ausgabefenster die Meldung "Weitere Informationen sind im Build-Protokoll verfügbar." Es gibt also irgendwo ein separates Protokoll. Ich habe es noch nicht gefunden.
Brandon Kuczenski

Antworten:

106

Die Protokolldatei von Visual Studio wird nur für C ++ - Projekte unterstützt. Sie müssen nur mit dem Ausgabefenster für andere arbeiten.

Siehe diesen ähnlichen Thread: VS2010: Minimale Ausgabe der Build-Anmeldedatei und detaillierte Anmeldungsprotokolldatei

Und falls Sie dies für ein C ++ - Projekt tun, befindet sich die Datei unter :

... Erstellungsprotokoll im Verzeichnis der Zwischendateien ... Der Pfad und der Name des Erstellungsprotokolls werden durch den MSBuild-Makroausdruck dargestellt $(IntDir)\$(MSBuildProjectName).log.

Dmitry Pavlov
quelle
14
Ich finde es einfach albern von Visual Studio, keine detaillierte Protokollierung in einer Datei zu haben. Na ja, eine Realität, die ich akzeptieren muss. Vielen Dank für Ihre Antwort, @Dmitry
Hanxue
8
@hanxue - Es hat ein Protokoll. Dieses Protokoll wird einfach nicht an eine Datei gesendet. Wenn Sie eine Protokolldatei möchten, führen Sie msbuild über die Befehlszeile aus.
Ritch Melton
43
DANN SAGT ES NICHT SO :-(
Simon_Weaver
2
Gott. Verdammt. Warum ist dies nicht nur eine Eigenschaft der Lösung? Warum ist das Ausgabefenster überhaupt so schrecklich, dass Sie gezwungen sind, es die ganze Zeit auf minimaler Ausgabe zu halten, und warum sind es 8 Schritte, um von einem Ausgangspegel zum anderen zu wechseln? Beheben Sie diese bitte.
James
@ James Ich denke, Sie könnten ein Makro schreiben und es der Symbolleistenschaltfläche zuweisen. Diese Links können ein Ausgangspunkt für stackoverflow.com/questions/12062515/… und vlasovstudio.com/visual-commander
Dmitry Pavlov sein
23

Die msdn-Dokumentation ist ziemlich klar darüber (und es wird dir nicht gefallen!):

https://msdn.microsoft.com/en-us/library/jj651643.aspx

Wo steht:

So erstellen Sie eine Build-Protokolldatei für ein Managed-Code-Projekt Wählen Sie in der Menüleiste Build, Build Solution.

Markieren Sie im Ausgabefenster die Informationen aus dem Build und kopieren Sie sie in die Zwischenablage.

Öffnen Sie einen Texteditor wie Notepad, fügen Sie die Informationen in die Datei ein und speichern Sie sie.

C Johnson
quelle
14
Das ist alles gut und schön, bis Sie die Diagnoseausgabe verwenden und VS beschließt, eine Ausnahmebedingung "Nicht genügend Speicher" auszulösen, wenn Sie versuchen, in die Zwischenablage zu kopieren. Wirklich ist eine grundsätzlich dumme Entscheidung, das Senden des Build-Protokolls an eine Datei in der IDE nicht zu unterstützen. Aber hey ho, so ist das Leben.
Steve Pettifer
1
Pipe den Build in eine Textdatei? msbuild mysln.sln> output.txt (muss wahrscheinlich Parameter hinzufügen, damit Ihr SLN kompiliert wird, aber Sie sollten in der Lage sein, dies aus dem vs-Ausgabefenster iirc mit der richtigen Ausführlichkeitsstufe herauszuholen)
Daniel M
Wenn ich über die Befehlszeile baue, geben meine Build-Systeme normalerweise nur minimale Informationen an das Terminalfenster aus, aber ein detailliertes Protokoll in einer Datei. MSBuild kann das.
C Johnson
"Und es wird dir nicht gefallen!" Das sagt alles in 6 Worten, danke
FIV
23

Verwenden Sie die Build-Ausgabe, anstatt sich in einer Datei anzumelden. Anstatt zu kopieren / einfügen, klicken Sie einfach irgendwo in der Ausgabe und drücken Sie STRG + S, um zu speichern. Visual Studio fordert Sie zur Eingabe eines Speicherorts auf (getestet mit Visual Studio 2017, aber ich gehe davon aus, dass dies auch in früheren Versionen funktioniert).

Geben Sie hier die Bildbeschreibung ein

Dan Gøran Lunde
quelle
Das ist gut. Sie sollten dies auch in das Kontextmenü einfügen.
Sheen
2

Obwohl VS dies nicht direkt zulässt, ist es dennoch möglich, mit MSBuild "innerhalb" von VS2015 zu erstellen und sowohl die Ausgabe des Build-Fensters als auch die Protokolldatei wie folgt abzurufen: (Dies ist wahrscheinlich ein kleiner Hack.)

  1. Fügen Sie in Ihrer VS Managed-Lösung ein neues Projekt hinzu (nennen wir es "Make"). ein. Der gewünschte Projekttyp ist Visual C ++ / NMake-Projekt.
  2. Definieren Sie die MSBuild-Befehle, die Sie in der Befehlszeile benötigen (siehe unten).
  3. Ändern Sie die Lösungskonfiguration, um das NMake-Projekt anstelle der normal verwalteten Projekte zu erstellen.

Dadurch wird ein Projekt mit den Befehlszeilen "Erstellen", "Neu erstellen" und "Bereinigen" erstellt, in denen Sie MSBuild direkt ausführen können. Beispielsweise:

Wiederaufbau: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Clean,Build

Bauen: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Build

Reinigen: MSBuild.exe /ds /v:diag /property:Configuration=Debug ..\BuildTest\BuildTest.csproj /t:Clean

Sie können auch mehrere MSBuild.EXE-Befehlszeilen angeben, um mehrere Projekte zu erstellen. Für das übliche Ergebnis der Erstellung der gesamten Lösung können Sie nur die endgültigen Endbaugruppen als Ziel festlegen und das Abhängigkeitsdiagramm die einzelnen Ziele generieren lassen.

Dadurch wird eine .log-Datei erstellt, in der NAME der Name des von Ihnen verwendeten NMake-Projekts ist. Im obigen Beispiel wäre das Protokoll make.log.

Ein funktionierendes Beispiel ist auf GitHub verfügbar: https://github.com/bitblitz/VS_MsbuildExample (getestet mit VS2015)

Beachten Sie, dass das direkte Erstellen einzelner Projekte weiterhin mit dem normalen VS-Verhalten erstellt wird. Sie können jedoch die vollständige Lösung in VS erstellen und die Erstellungsprotokolle abrufen.

Brad
quelle
1
Die Verknüpfung zu VS_MsbuildExample ist unterbrochen.
JPaget
Hey @brad, was ist mit deinem Beispiel auf GitHub passiert?
Yann Duran
Github behoben, Entschuldigung für Probleme. @YannDuran
Brad