Ich frage mich nur, ob mir jemand mit einigen msbuild-Skripten helfen könnte, die ich zu schreiben versuche. Ich möchte alle Dateien und Unterordner mit msbuild von einem Ordner in einen anderen Ordner kopieren.
{ProjectName}
|----->Source
|----->Tools
|----->Viewer
|-----{about 5 sub dirs}
Was ich tun muss, ist, alle Dateien und Unterordner aus dem Tools-Ordner in den Debug-Ordner für die Anwendung zu kopieren. Dies ist der Code, den ich bisher habe.
<ItemGroup>
<Viewer Include="..\$(ApplicationDirectory)\Tools\viewer\**\*.*" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" />
</Target>
Das Build-Skript wird ausgeführt, kopiert jedoch keine der Dateien oder Ordner.
Vielen Dank
scripting
msbuild
build-process
build
Nathan W.
quelle
quelle
%(RecursiveDir)
zum Zielordner die Verzeichnisstruktur neu erstellt wird. Ansonsten ist der Ausgang flach. Dies ist die beste Antwort.Ich denke, das Problem könnte darin liegen, wie Sie Ihre ItemGroup erstellen und die Aufgabe Kopieren aufrufen. Überprüfen Sie, ob dies sinnvoll ist:
quelle
CreateItem
Aufgabe ist veraltet. Regex hat die Alternative. msdn.microsoft.com/en-us/library/s2y3e43x.aspxIch bin ein bisschen neu in MSBuild, aber ich finde die EXEC-Aufgabe praktisch für solche Situationen. Ich bin in meinem Projekt auf die gleiche Herausforderung gestoßen, und das hat bei mir funktioniert und war viel einfacher. Bitte lassen Sie mich wissen, wenn dies keine gute Praxis ist.
quelle
Copy
Aufgabe anstelle eines Befehls zu verwenden, ist die Kompatibilität. Ich habe zuvor mit Mono auf Linux gebaut undxcopy
funktioniert dort offensichtlich nicht.\**\*.*
Hilfe, um Dateien aus dem gesamten Ordner zu erhalten. RecursiveDir-Hilfe, um die gesamte Datei in den entsprechenden Ordner zu legen ...quelle
CreateItem
Aufgabe ist veraltet. Regex hat die Alternative. msdn.microsoft.com/en-us/library/s2y3e43x.aspxHaben Sie versucht, ein konkretes Zielverzeichnis anstelle von anzugeben?
Ich bin nicht sehr kompetent mit fortgeschrittener MSBuild-Syntax, aber
sieht komisch aus für mich. Das Skript sieht gut aus, daher liegt das Problem möglicherweise in den Werten von
$(ApplicationDirectory)
und$(OutputPath)
BEARBEITEN:
Hier ist ein Blog-Beitrag, der nützlich sein könnte:
Gewusst wie: Rekursives Kopieren von Dateien mithilfe der Aufgabe
quelle
Dies ist das Beispiel, das funktioniert hat:
Quelle: https://msdn.microsoft.com/en-us/library/3e54c37h.aspx
quelle
Dies ist eine Kopieraufgabe, die ich in meinem eigenen Projekt verwendet habe. Es funktionierte perfekt für mich, Ordner mit Unterordnern erfolgreich an das Ziel zu kopieren:
In meinem Fall habe ich den Veröffentlichungsordner eines Projekts in einen anderen Zielordner kopiert. Ich denke, er ähnelt Ihrem Fall.
quelle
Persönlich habe ich CopyFolder verwendet, der Teil der DEZA-Aufgabenbibliothek ist.
http://sdctasks.codeplex.com/
quelle
Der beste Weg, um Dateien mit MSBuild rekursiv von einem Verzeichnis in ein anderes zu kopieren, ist die Verwendung der Aufgabe "Kopieren" mit SourceFiles und DestinationFiles als Parametern. Zum Beispiel - Um alle Dateien aus dem Build-Verzeichnis in das Backup-Verzeichnis zu kopieren, wird
Im obigen Kopierbefehl werden nun alle Quellverzeichnisse durchlaufen und Dateien in das Zielverzeichnis kopiert.
quelle
Wenn Sie mit einer typischen C ++ - Toolchain arbeiten, können Sie Ihre Dateien auch in die Standardliste CopyFileToFolders einfügen
Dies ist nicht nur einfach, sondern auch ein guter Weg, da die Aufgabe CopyFilesToFolders geeignete Eingaben, Ausgaben und sogar TLog-Dateien generiert und daher sicherstellt, dass Kopiervorgänge nur ausgeführt werden, wenn sich eine der Eingabedateien geändert hat oder eine der Ausgabedateien fehlt. Mit TLog erkennt Visual Studio das Projekt auch ordnungsgemäß als "aktuell" oder nicht (es verwendet dafür einen separaten U2DCheck-Mechanismus).
quelle