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?
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.
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.
Ein mögliches Problem ist, dass Sie $(ProjectDir)
anstelle von $(ProjectPath)
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"
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
Tags und Links visual-studio powershell batch-file