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?

War es hilfreich?

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:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top