Ich arbeite an einem Projekt, das erfordert, dass DLLs, die durch den Aufbau meiner Lösung generiert werden, aus dem bin-Ordner in einen anderen Ordner kopiert werden, von denen beide auf meinem Rechner, in meinem C-Laufwerk sind. Ich habe eine Batch-Datei geschrieben, die xcopy verwendet, um dies zu erreichen, die Sie hier sehen können:
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\"
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\"
Nun habe ich zahlreiche Wiederholungen dieser Datei ausprobiert, die sich hier befindet:
C:\Users\scogan\Desktop\CopyFiles.bat
so dass meine Befehlszeile für das Post-Build-Ereignis wie folgt aussieht:
call C:\Users\scogan\Desktop\CopyFiles.bat
Ich habe diese Stapelverarbeitungsdatei allein mit zwei Textdateien in Ordnern auf meinem Desktop ausgeführt, und es funktioniert einwandfrei. Ich habe sie auch mit den Dateien, die ich kopieren muss, allein ausgeführt, und auch das funktioniert gut. Wenn ich jedoch versuche, dies als Post-Build-Ereignis auszuführen, erhalte ich diese Ausgabe:
1> Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe
1> File not found - Organizr.Services.dll
1> 0 File(s) copied
1> 0 File(s) copied
1> File not found - Organizr.Services.pdb
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4.
Ich habe etwas recherchiert und herausgefunden, dass der Fehlercode 4 bedeutet, dass "Ein Initialisierungsfehler ist aufgetreten. Es ist nicht genügend Speicher oder Festplattenplatz vorhanden, oder Sie haben einen ungültigen Laufwerksnamen oder eine ungültige Syntax in der Befehlszeile eingegeben."
Ich habe auch nachgeschaut, was MSB3073 ist, und habe nicht wirklich viel gefunden, was mir da helfen kann. Meine Frage ist also, was mache ich falsch? Bringen die absoluten Pfade alles durcheinander? Für jede Hilfe bin ich dankbar.
Durch Herumspielen mit verschiedenen Projekteigenschaften fand ich heraus, dass die Reihenfolge der Projekterstellung das Problem war. Das Projekt, das die Dateien generiert hat, die ich kopieren wollte, wurde als zweites Projekt erstellt, aber das Projekt, das die Batchdatei als Post-Build-Ereignis ausführte, wurde als erstes Projekt erstellt, also habe ich das Build-Ereignis einfach an das zweite Projekt angehängt, und es funktioniert einwandfrei. Vielen Dank für Ihre Hilfe, jeder, obwohl.
Ziehen Sie die Aufgabe MsBuild "Copy" in einem AfterBuild-Ziel einem Post-Build-Ereignis vor.
Fügen Sie dieses Ziel in Ihre Projektdatei ein und entfernen Sie das PostBuildEvent.
<Target Name="AfterBuild">
<Copy SourceFiles="C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.*"
DestinationFolder="C:\inetpub\wwwroot\AppServer\bin\"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>