Ich habe ein Projekt mit einem Post-Build-Event:
copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe $(TargetDir)
Es funktioniert jedes Mal gut auf meinem Computer. Ich habe einen neuen Entwickler, der immer den Fehler "Beendet mit Code 1" erhält. Ich ließ sie den gleichen Befehl in einer DOS-Eingabeaufforderung ausführen, und es funktionierte gut. Was könnte das verursachen? Gibt es eine Möglichkeit, zum eigentlichen Fehler zu gelangen?
Wir verwenden beide Visual Studio 2008.
visual-studio-2008
post-build
Tim Scott
quelle
quelle
Antworten:
Sie hatte ein Leerzeichen in einem der Ordnernamen in ihrem Pfad und keine Anführungszeichen.
quelle
Der mit den "Pings" hat mir geholfen ... kann aber etwas besser erklärt werden ...
Für mich war die Lösung zu ändern:
dazu:
Hoffe es funktioniert bei dir. :-)
quelle
Ich habe dies für zukünftige Besucher hinzugefügt, da dies eine ziemlich aktive Frage ist.
ROBOCOPY wird mit "Erfolgscodes" beendet, die unter 8 liegen. Siehe: http://support.microsoft.com/kb/954404
Dies bedeutet, dass:
Also habe ich das einfach gelöst, indem ich es am Ende der Batch-Datei hinzugefügt habe
Schlagen Sie vor, ROBOCOPY-Fehler auf diese Weise zu behandeln
Verwirrung entsteht, wenn keine Dateien kopiert werden = kein Fehler in VS. Wenn dann Änderungen vorgenommen werden, werden Dateien kopiert, VS-Fehler, aber alles, was der Entwickler wollte, wurde getan.
Zusätzlicher Tipp: Verwenden Sie keine Pause im Skript, da dies zu einer unbestimmten Pause im VS-Build führen würde. Verwenden Sie während der Entwicklung des Skripts so etwas wie
timeout 10
. Sie werden dies bemerken und auskommentieren, anstatt einen hängenden Build zu haben.quelle
Mein Grund für den Code 1 war, dass der Zielordner schreibgeschützt war. Hoffe das hilft jemandem! Ich hatte ein Post-Build-Ereignis, um eine Kopie von einem Verzeichnis in ein anderes zu erstellen, und das Ziel war schreibgeschützt. Also habe ich einfach das schreibgeschützte Attribut für das Verzeichnis und alle seine Unterverzeichnisse deaktiviert! Stellen Sie einfach sicher, dass es sich um ein sicheres Verzeichnis handelt!
quelle
Holen Sie sich den Prozessmonitor von SysInternals und richten Sie ihn so ein, dass er nach dem Lunaverse.DbVerse (im Feld Pfad) sucht, um das Operationsergebnis anzuzeigen. Von dort sollte klar sein, was schief gelaufen ist
quelle
Ich musste VS als Administrator ausführen, damit meine Post-Build-Kopie auf ein Betriebssystem mit dem Schutz ".. \ Common7 \ IDE \ PrivateAssemblies" funktioniert
quelle
Für diejenigen, die ‚verwenden Kopie ‘ im Buildereignis ( Pre-Build - Ereignis Befehlszeile oder / und Postbuildereignis Befehlszeile ) von Projekt -> Eigenschaften : Sie ‚ Kopieren ‘ Befehlsparameter sollen wie hier aussehen:
copy "source of files" "destination for files"
. Denken Sie daran, Anführungszeichen zu verwenden (um Probleme mit Leerzeichen in Adresszeichenfolgen zu vermeiden).quelle
Ich hatte ein ähnliches Problem, aber speziell in einer Jenkins-Build-Umgebung. Um das Problem zu beheben, habe ich von einem Kopierbefehl im Post-Build-Ereignis zu einem Kopierziel gewechselt.
Ich habe das geändert:
dazu:
und es funktioniert jetzt gut.
Der spezifische Fehler, den ich bekam, war:
quelle
Ich konnte meinen Code 1 reparieren, indem ich Visual Studio als Admin ausführte. Anscheinend hatte es keinen Zugriff, um die Shell-Befehle ohne Admin auszuführen.
quelle
Aus bewährten Gründen empfehle ich, das Post-Build-Ereignis durch eine MS Build File Copy-Aufgabe zu ersetzen .
quelle
Für mich musste ich sicherstellen, dass das Programm, in das ich die Datei kopierte, zu diesem Zeitpunkt nicht ausgeführt wurde. Es gab keine Fehler in der Syntax. Hoffe das hilft jemandem.
quelle
Ich habe gerade den gleichen Fehler erhalten. Ich hatte ein% im Zielpfad, das maskiert werden musste
musste sein
quelle
Ok, das ist ein Problem mit vielen Lösungen, also poste ich nur meine, um den Leuten mehr Hinweise zu geben. Meine Situation besteht darin, die Ordner in Ihrem Pfad zu überprüfen und sicherzustellen, dass alle auf Ihrem Computer vorhanden sind. Beispiel: "$ (SolutionDir) \ partBin \ Bin \ $ (Projektname) .pdb", aber "Bin" befindet sich nicht im Ordner "partBin".
quelle
$(SolutionDir)
redundant.Für diejenigen, die den Befehl 'copy' in Build Events (Befehlszeile für Ereignisse vor dem Erstellen oder / und Befehlszeile für Ereignisse nach dem Erstellen) unter Projekt -> Eigenschaften verwenden: Der Zielordner sollte vorhanden sein
quelle
So viele Lösungen ...
In meinem Fall musste ich die bat-Datei mit einer Nicht-Unicode-Codierung (Western, Windows) speichern. Wenn ich die Datei zu Visual Studio hinzufügte (und wahrscheinlich hätte ich sie außerhalb des VS ausführen sollen), wurde sie standardmäßig mit UTF-8-Codierung hinzugefügt.
quelle
Ich hatte das gleiche Problem und es stellte sich heraus, dass ich das Projekt umbenannt hatte. Ich ging in die Projekteigenschaften und änderte den Assembly-Namen und den Root-Namespace in den Projektnamen. Danach funktionierte es hervorragend!
quelle
Noch eine Antwort ...
In meinem Fall hatte ich ein Visual Studio 2017-Projekt, das sowohl auf .Net Standard 1.3 als auch auf .Net Framework 2.0 abzielte. Dies wurde in der .csproj-Datei wie folgt angegeben:
Ich hatte auch eine Post-Build-Ereignisbefehlszeile wie diese:
Mit anderen Worten, ich habe versucht, die vom Build erzeugte .NET Framework-DLL an einen alternativen Speicherort zu kopieren.
Dies ist mit diesem Fehler fehlgeschlagen, als ich einen Rebuild durchgeführt habe:
Nach langem Frust stellte ich schließlich fest, dass Rebuild alle Ausgabedateien löschte, dann den Build für .Net Standard 1.3 durchführte und dann versuchte, die Ereignisbefehlszeile nach dem Build auszuführen, was fehlschlug, weil die Datei kopiert werden musste wurde noch nicht gebaut.
Die Lösung bestand also darin, die Erstellungsreihenfolge zu ändern, dh zuerst für .Net Framework 2.0 und dann für .Net Standard 1.3 zu erstellen.
Dies funktioniert jetzt mit dem kleinen Fehler, dass die Befehlszeile für Ereignisse nach dem Build zweimal ausgeführt wird, sodass die Datei zweimal kopiert wird.
quelle
In meinem Fall musste ich
cd
(das Verzeichnis wechseln), bevor ich die bat-Datei aufrief, da sich in der bat-Datei eine Kopieroperation befand, die relative Pfade spezifizierte.quelle