Warum schlagen alle Pre-Build- oder Post-Build-Ereignisse in Visual Studio mit Exit-Code 1 fehl?

9

Mein Ziel ist das Kopieren einer EXE-Datei aus einem bin-Ordner von Lösung A in einen anderen B-Ressourcenordner für Lösungen im Postbuildereignis von Lösung A.
Ich habe den notwendigen xcopy-Befehl erstellt und in Powershell ausprobiert: Es funktioniert einwandfrei.
Jedes Mal, wenn ich den Aktionen in VS einen Befehl hinzufüge, schlägt der Build fehl: "# command # exited with code 1", wobei # command # beispielsweise der xcopy-Befehl ist.
Ich habe versucht, VS als Admin auszuführen und derzeit habe ich versucht, nur eine .bat-Datei auszuführen, die "@echo off @ exit 0" enthält. Auch das führt zu "# command # exited with code 1".

Habe ein Beispiel dafür, was ich als VS post / pre-build ausprobiert habe:
rufe "projdir \ test.bat" auf Rufen Sie projdir \ test.bat
auf "projdir \ test.bat"
projdir \ test.bat
... Ich habe projdir als "$ (ProjectPath)" und manuellen Pfad probiert.

Ich habe output auf verbose gesetzt und Folgendes gefunden:
Der Befehl "C: \ Benutzer \ Traubenfuchs \ AppData \ Local \ Temp" wurde falsch geschrieben oder konnte nicht gefunden werden. (Dieser Ordner existiert tatsächlich, aber ich weiß nicht, was er tun soll.)
Das Gleiche passiert, wenn ich einen Befehl xcopy in pre / post build einfüge Weiß jemand, was ich falsch mache?

    
Traubenfuchs 30.07.2014, 08:37
quelle

3 Antworten

5

Kürzlich stieß ich auf ein ähnliches Problem.

Über Ihr post-build Event "Hallo Welt":  Versuchen Sie, die Powershell direkt aufzurufen

%Vor%

==================

Mein Pre-Build-Event sieht folgendermaßen aus:

%Vor%

Mein scriptPath.ps1 sieht folgendermaßen aus:

%Vor%

Beachten Sie, dass ich am Ende ohne "exit 0" den Rückkehrcode 1 von meinem Skript erhalten habe.

    
Алексей Козлов 13.09.2014, 13:01
quelle
5

Dieses Problem trat aufgrund einer "Software-Einschränkungsrichtlinie" auf, die in einem Domänen-Gruppenrichtlinienobjekt eingerichtet wurde. Scheinbar erstellen Pre- und Post-Builds eine .cmd-Stapeldatei im Temp-Ordner. Hier ist, was das Logging mir gezeigt hat:

  

cmd.exe (PID = 8456) identifiziert   C: \ Benutzer \ brian \ AppData \ Local \ Temp \ tmp733425d2c0604973a90a0a175c13353e.exec.cmd   als Nicht erlaubt unter Verwendung der Standardregel, Guid =   {11015445-d282-4f86-96a2-9e485f593302}

Um das zu beheben, haben wir das Gruppenrichtlinienobjekt geändert, das den SRP so gesteuert hat, dass er keine .cmd-Dateien enthielt. Schließlich besteht das Ziel von SRP darin, ausführbare Malware und keine Batch-Dateien zu blockieren. Ich könnte deswegen einen Sicherheitsrückstoß bekommen. Hoffentlich weiß jemand einen besseren Weg, um dieses Problem zu beheben.

    
Brain2000 29.04.2016 21:04
quelle
2

Ein mögliches Problem ist, dass Sie $(ProjectDir) anstelle von $(ProjectPath)

verwenden müssen

Wenn Sie $(ProjectPath) verwenden, ist es tatsächlich: "C:\Users\....\Project\MyProject.csproj"

Versus $(ProjectDir) Das ist: "C:\Users\....\Project\"

Beachten Sie, dass die erste Version tatsächlich auf Ihre Projektlösungsdatei zeigt ... was dazu führen würde, dass alles fehlschlägt.

Ein anderer ist, dass $(ProjectDir) automatisch den nachgestellten Schrägstrich zum Pfad hinzufügt. d. h. "$(ProjectDir)\test.bat" würde tatsächlich zu "C: \ Benutzer .... \ Projekt \ test.bat"

übersetzen

Sie müssen auch sicherstellen, dass Sie alle Ihre Dateipfade in Anführungszeichen setzen

Der korrekte Aufruf würde also so aussehen:

%Vor%

Andere Dinge, die ausgecheckt werden müssten, wären, sicherzustellen, dass das Verzeichnis, von dem das Skript ausgeführt wird, korrekt ist. Siehe SO: Visual Studio 2012 , postbuild-Ereignis, bat-Datei erstellt keine neue Datei (nicht ausgeführt)

Haben Sie die Vorschläge in diesem StackOverflow überprüft? Post Build wird mit Code 1 beendet

Bearbeiten

Versuchen Sie Folgendes:

%Vor%

Sie müssen alle Befehle mit @exit 0 beenden, sonst denkt es nicht, dass es richtig beendet wurde

    
HAL9256 30.07.2014 16:51
quelle