Visual Studio-Post-Build-Ereignis – In relativen Verzeichnisspeicherort kopieren
-
08-07-2019 - |
Frage
Bei einem erfolgreichen Build möchte ich den Inhalt des Ausgabeverzeichnisses an einen anderen Ort darunter kopieren "Base" Ordner.Dieser übergeordnete Ordner ist ein relativer Teil und kann je nach Quellcodeverwaltungseinstellungen variieren.
Ich habe einige der mir zur Verfügung stehenden Makrowerte aufgelistet ...
$(SolutionDir) = D:\GlobalDir\Version\AppName\Solution1\build
$(ProjektDir) = D:\GlobalDir\Version\AppName\Lösung1\Version\ProjektA\
Ich möchte den Inhalt des Ausgabeverzeichnisses in den folgenden Ordner kopieren:
D:\GlobalDir\Version\AppName\Solution2\Project\Dependency
Der Basisspeicherort „D:\GlobalDir\Version\AppName“ muss von einem der oben genannten Makros abgerufen werden.Allerdings ist keiner der Makrowerte aufgeführt nur der übergeordnete Standort.
Wie extrahiere ich nur der Basisspeicherort für den Post-Build-Kopierbefehl?
Lösung
Wenn keine der TargetDir oder andere Makros an die richtige Stelle verweisen, verwenden Sie die „..“ Verzeichnis auf der Ordnerhierarchie rückwärts zu gehen.
dh. Verwenden Sie $(SolutionDir)\..\..
zu Ihrem Basisverzeichnis zu erhalten.
Für Liste aller Makros finden Sie hier:
Andere Tipps
Hier ist, was Sie in der Projektpostbuildereignis Befehlszeile setzen wollen:
copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
EDIT:. Oder wenn Ihr Zielname ist anders als der Projektname
copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
Sie könnten versuchen:
$(SolutionDir)..\..\
Ich denke, das im Zusammenhang, aber ich hatte ein Problem, wenn sie direkt mit msbuild
Befehlszeile Gebäude (aus einer Batch-Datei) vs Gebäude aus VS.
Mit so etwas wie folgt aus:
<PostBuildEvent>
MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>
(Anmerkung: start XCOPY
statt XCOPY
verwendet um ein Problem mit den Berechtigungen zu erhalten, die das Kopieren verhindert)
Das Makro $(SolutionDir)
..\
ausgewertet, wenn msbuild aus einer Batch-Datei ausgeführt wird, die in der XCOPY
Befehl andernfalls geführt. Es funktionierte ansonsten gut, wenn in Visual Studio gebaut. Bestätigt /verbosity:diagnostic
mit der ausgewerteten Ausgabe zu sehen.
das Makro $(ProjectDir)..\
Verwenden statt, die auf dasselbe hinausläuft, hat gut funktioniert und behielt den vollständigen Pfad in beiden Szenarien bauen.
Wäre es nicht sinnvoll, msbuild direkt zu verwenden?Wenn Sie dies bei jedem Build tun, können Sie dann am Ende eine msbuild-Aufgabe hinzufügen?Wenn Sie nur sehen möchten, ob Sie keinen anderen Makrowert finden, der nicht in der Visual Studio-IDE angezeigt wird, können Sie die msbuild-Optionen auf „Diagnose“ umschalten. Dadurch werden Ihnen alle Variablen angezeigt, die Sie verwenden könnten, z sowie deren aktueller Wert.
Um dies in Visual Studio zu aktivieren, gehen Sie zu „Extras/Optionen“, scrollen Sie dann in der Baumansicht nach unten zum Abschnitt „Projekte und Lösungen“, erweitern Sie diesen und klicken Sie auf „Erstellen und ausführen“. Auf der rechten Seite befindet sich ein Dropdown-Menü, das die Ausführlichkeit der Build-Ausgabe angibt Wenn Sie dies auf „Diagnose“ setzen, wird Ihnen angezeigt, welche anderen Makrowerte Sie verwenden könnten.
Da ich nicht ganz weiß, welches Level Sie erreichen möchten und wie komplex Ihr Build sein soll, kann Ihnen dies vielleicht 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 die Verwendung des vollständigen msbuild-Skripts möglicherweise etwas übertrieben .
Hoffe es hilft Rihan