2014-03-28 6 views
13

Ich habe eine Anforderung, wo ich einige Dateien komprimieren muss, nachdem ich eine Lösungsdatei erstellen.Zip-Dateien nach Build abgeschlossen in Visual Studio

Konnte dies automatisch erreicht werden, sobald ich mein Projekt im Release/Debug-Modus gebaut habe.

+1

http://markkemper1.blogspot.se/2010/10/zipping-build-outputs-using-build-file.html –

Antwort

8

Normalerweise habe ich Sachen wie das Erstellen von ZIP-Dateien, Installer, NuGet-Pakete usw. in mein eigentliches Projekt.
Warum? Denn wenn ich es dort hinstelle, wird es ausgeführt jedes Mal Ich baue das Projekt in Visual Studio, zum Beispiel, wenn ich debuggen bin.
Aber ZIP-Dateien, Installer usw. werden nur benötigt, wenn ich ein Release mache, so will ich nicht warten, dass sie jedes Mal neu generiert werden, wenn ich F5 in Visual Studio drücke.

Um eine Freigabe zu erstellen, erstelle ich normalerweise eine Batch-Datei, die eine MSBuild project file ausführt, die alles erstellt, was notwendig ist, um eine Veröffentlichung zu machen.
IMO Erstellen einer ZIP-Datei gehört auch in diese MSBuild-Projektdatei.

Sie können alle Informationen, die Sie von mir in diesen beiden früheren Antworten brauchen:

plus here's an example MSBuild project file von einem meiner Projekte, die folgendes tut:

  • build das Projekt
  • Laufeinheit testet
  • zwei Freigabeordner mit Binärdateien erstellen (eine DLL und eine .exe)
  • erstellen zwei zip Dateien, eine für jeden der Ordner mit Binärdateien
  • Erstellen Sie ein NuGet-Paket für die DLL
  • Erstellen Sie ein ClickOnce-Setup für die.exe
  • automatisch die richtige Versionsnummer für alles

Das Tolle an diesem Ansatz ist, dass ich eine Veröffentlichung machen, die alles enthält Ich habe gerade aufgeführt, mit einem einzigen Klick (eine Batch-Datei ausgeführt wird) .
Das Erstellen all dieser Dinge dauert einige Zeit, aber da es nicht Teil der Visual Studio-Lösung ist, wird es nicht jedes Mal ausgeführt, wenn ich ein Build in Visual Studio mache - ich führe es nur aus, wenn ich es wirklich brauche.

+9

Oder verwenden Sie die viel einfachere Methode, es in das Post-Build-Ereignis zu setzen und nur die Schritte auszuführen, die für eine Version benötigt werden, wenn Sie eine Release-Build-Konfiguration ausführen ... Sie können dieses Build trotzdem über die Befehlszeile ausführen Nachteile bei der Verwendung von Post-Build, solange Sie es korrekt implementieren. –

+0

Es tut uns leid, dieses tote Pferd wieder auferstehen zu lassen, aber Sie könnten auch einfach ein neues Ziel namens Deploy erstellen. Also, im Grunde genommen hätten Sie Debug, Release und Deploy. Wo Deploy eine Variante von Release mit den zusätzlichen Schritten ist, die hinzugefügt werden. – code4life

4

Gehen Sie zu den Eigenschaften Ihres Projekts und schreiben Sie im Reiter 'Build Events' Ihre Befehle in den Post-Build-Bereich. Die dort ausgeführten Befehle werden genau wie eine Cmd-Batch-Datei ausgeführt.

Auch: dort ein paar 'Makros' zur Verfügung, die helfen können, verweisen auf die Projektordner etc .. Überprüfen Sie es.

Und um Jasons Kommentar hinzuzufügen, können Sie die Batch-Datei auch selbst als Post-Build-Befehl aufrufen.

(Eine Einschränkung über Post-Build-Ereignisse: Sie werden nach dem Build ausgeführt Aber wenn Sie CSC Ziele haben sie nach dem Build zusammengestellt und nach den Ereignissen Post-Build Wenn Sie die Ausgabe egcopy wollen.. Dateien dieser CSC-Ziele müssen Sie in einem post-compile Ereignis zu tun.)

+4

+1. Sie benötigen ein Zip-Dienstprogramm, das Sie aufrufen können, z. B. 7zip, und dann müssen Sie lediglich die Befehlszeile für 7zip zum Post-Build-Skript hinzufügen. Sie können dies isoliert in einer DOS-Box ausführen und dann die endgültigen Befehle in Ihr Post-Build-Ereignis kopieren, sobald es funktioniert. –

+0

@JasonWilliams - Gibt es in Visual Studio keine standardmäßige Zipping-Funktion? Wenn alle Entwickler 7zip oder winzip haben und mit ihrem Pfad im richtigen Ordner sind, ist sie nicht skalierbar. – bschandramohan

+1

@Chandra Nein, nicht integriert in vs. 7zip ist jedoch eine einzelne EXE-Datei, so dass Sie es einfach in die Quellcodeverwaltung einchecken und Ihren Post-Build schreiben können, um sicherzustellen, dass jeder Entwickler die richtige Version des Tools besitzt um einen funktionierenden und konsistenten Build zu erhalten. –

7

Verwendung von Powershell, nur wenn Releasebuild tun:
if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.zip' -Force)

Es Reißverschluss nur die dll, PDB und Konfigurationsdateien.
-Force wird verwendet, um die ZIP-Datei bei jedem Build zu überschreiben.

Verwandte Themen