wake-up-neo.com

Visual Studio-Postbuild-Ereignis - In relativen Verzeichnisspeicherort kopieren

Nach einer erfolgreichen Erstellung möchte ich den Inhalt des Ausgabeverzeichnisses an einen anderen Speicherort im selben "base" -Ordner kopieren. Dieser übergeordnete Ordner ist ein relativer Teil und kann abhängig von den Einstellungen der Versionsverwaltung variieren.

Ich habe einige der Makro-Werte aufgelistet, die mir zur Verfügung stehen ...

$ (SolutionDir) = D:\GlobalDir\Version\AppName\Solution1\build

$ (ProjectDir) = D:\GlobalDir\Version\AppName\Solution1\Version\ProjectA \

Ich möchte den Inhalt des Ausgabeverzeichnisses in den folgenden Ordner kopieren:

D:\GlobalDir\Version\AppName\Solution2\Project\Dependency

Das Basisverzeichnis "D:\GlobalDir\Version\AppName" muss aus einem der oben genannten Makros abgerufen werden. Keiner der Makrowerte listet jedoch nur den übergeordneten Speicherort auf.

Wie extrahiere ich nur den Basisspeicherort für den Postbuild-Kopierbefehl?

212
Preets

Wenn keines der TargetDir- oder anderen Makros auf die richtige Stelle verweist, verwenden Sie das Verzeichnis "..", um die Ordnerhierarchie rückwärts zu durchlaufen.

dh Verwenden Sie $(SolutionDir)\..\.., um Ihr Basisverzeichnis abzurufen.


Eine Liste aller Makros finden Sie hier:

http://msdn.Microsoft.com/en-us/library/c02as0cs.aspx

176
gbjbaanb

Folgendes möchten Sie in die Befehlszeile für das Post-Build-Ereignis des Projekts einfügen:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

BEARBEITEN: Oder wenn sich Ihr Zielname vom Projektnamen unterscheidet.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
268
Lucas B

Du könntest es versuchen:

$(SolutionDir)..\..\
40
ichiban

Ich denke, das hängt zusammen, aber ich hatte ein Problem, als ich direkt mit der msbuild -Befehlszeile (aus einer Batch-Datei) erstellte, im Gegensatz zum Erstellen aus VS.

Mit etwas wie dem folgenden:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(Hinweis: start XCOPY anstatt XCOPY wurde verwendet, um ein Berechtigungsproblem zu umgehen, das das Kopieren verhinderte)

Das Makro $(SolutionDir) wurde bei der Ausführung von msbuild aus einer Batchdatei mit ..\ Ausgewertet, was dazu führte, dass der Befehl XCOPY fehlschlug. Ansonsten hat es gut funktioniert, wenn es in Visual Studio erstellt wurde. Bestätigt mit /verbosity:diagnostic, Um die ausgewertete Ausgabe zu sehen.

Die Verwendung des Makros $(ProjectDir)..\, das auf dasselbe hinausläuft, hat problemlos funktioniert und den vollständigen Pfad in beiden Erstellungsszenarien beibehalten.

10
drzaus

Wäre es nicht sinnvoll, msbuild direkt zu verwenden? Wenn Sie dies bei jedem Build tun, können Sie am Ende eine msbuild-Task hinzufügen. Wenn Sie nur sehen möchten, ob Sie keinen anderen Makrowert finden, der in der Visual Studio-IDE nicht angezeigt wird, können Sie die msbuild-Optionen auf Diagnose setzen und alle Variablen anzeigen, die Sie als verwenden können sowie deren aktueller Wert.

Um dies in Visual Studio zu aktivieren, gehen Sie zu Extras/Optionen und scrollen Sie in der Baumansicht nach unten zum Abschnitt Projekte und Lösungen. Erweitern Sie diesen und klicken Sie auf Erstellen und Ausführen. Rechts befindet sich ein Dropdown-Menü, das die Ausführlichkeit der Build-Ausgabe angibt Wenn Sie dies auf Diagnose setzen, werden Ihnen die anderen Makrowerte angezeigt, die Sie verwenden könnten.

Da ich nicht genau weiß, zu welchem ​​Level Sie gehen möchten und wie komplex Ihr Build sein soll, kann dies Ihnen eine Idee geben. Ich habe kürzlich Build-Skripte erstellt, die sogar SQL-Code als Teil des Builds ausführen. Wenn Sie weitere Hilfe oder sogar einige Beispiel-Build-Skripte benötigen, lassen Sie es mich wissen. Wenn es sich jedoch nur um einen kleinen Prozess handelt, den Sie am Ende des Builds ausführen möchten, ist das Ausführen des vollständigen msbuild-Skripts möglicherweise ein bisschen zu viel .

Hoffe, es hilft Rihan

4
Rihan Meij