Bei einem erfolgreichen Build möchte ich den Inhalt des Ausgabeverzeichnisses an einen anderen Speicherort unter demselben "Basis" -Ordner kopieren . Dieser übergeordnete Ordner ist ein relativer Teil und kann je nach den Einstellungen der Quellcodeverwaltung variieren.
Ich habe einige der mir zur Verfügung stehenden Makrowerte aufgelistet ...
$ (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
Der Basisspeicherort "D: \ GlobalDir \ Version \ AppName" muss von 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 Befehl zum Erstellen nach dem Erstellen?
Folgendes möchten Sie in die Befehlszeile für Post-Build-Ereignisse des Projekts einfügen:
BEARBEITEN: Oder wenn sich Ihr Zielname vom Projektnamen unterscheidet.
quelle
/Y
. Vielen Dank, dass Sie den gesamten Befehl angezeigt haben.xcopy
mit Platzhaltern und den entsprechenden Schaltern verwenden, um ein ähnliches Ergebnis zu erzielen, während die (Baum-) Struktur desxcopy /i /e /s /y /f "<source>\MyFolder\*" "<destination>\MyFolder"
copy /Y "$(TargetPath)" "$(SolutionDir)somewhere\"
ohne den zusätzlichen Backslash, da $ (SolutionDir) einen nachgestellten Backslash enthält (zumindest in VS2012)Du könntest es versuchen:
quelle
Ich denke, das hängt damit zusammen, aber ich hatte ein Problem beim Erstellen direkt über die
msbuild
Befehlszeile (aus einer Batch-Datei) im Vergleich zum Erstellen innerhalb von VS.Verwenden Sie so etwas wie das Folgende:
(Hinweis:
start XCOPY
AnstattXCOPY
verwendet zu werden, um ein Berechtigungsproblem zu umgehen, das das Kopieren verhindert hat)Das Makro
$(SolutionDir)
ausgewertet ,..\
wenn msbuild aus einer Batch - Datei ausgeführt wird , die in der FolgeXCOPY
Befehl fehlschlägt. Ansonsten hat es gut funktioniert, wenn es in Visual Studio erstellt wurde. Bestätigt mit/verbosity:diagnostic
, um die ausgewertete Ausgabe anzuzeigen.Die Verwendung des Makros
$(ProjectDir)..\
, das sich auf dasselbe beläuft, hat einwandfrei funktioniert und in beiden Build-Szenarien den vollständigen Pfad beibehalten.quelle
Start
arbeitete für mich (fürxcopy
in einem freigegebenen Ordner).Wäre es nicht sinnvoll, msbuild direkt zu verwenden? Wenn Sie dies bei jedem Build tun, können Sie 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 aktivieren und alle Variablen anzeigen, die Sie als verwenden können sowie ihren aktuellen Wert.
Um dies in Visual Studio zu aktivieren, gehen Sie zu Extras / Optionen, 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 eine Dropdown-Liste, in der die Ausführlichkeit der Build-Ausgabe angegeben ist Wenn Sie dies auf Diagnose setzen, sehen Sie, welche anderen Makrowerte Sie verwenden können.
Da ich nicht genau weiß, auf welche Ebene Sie gehen möchten und wie komplex Ihr Build sein soll, kann dies Ihnen eine Vorstellung 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 vollständige Ausführen des vollständigen msbuild-Skripts möglicherweise etwas übertrieben .
Hoffe es hilft Rihan
quelle