2016-06-03 9 views
0

Ich versuche ein MSBuild-Ziel zu erstellen, das eine bestimmte Datei in eine Liste von Verzeichnissen aufnehmen und dann diese Datei unter einem anderen Namen in dasselbe Verzeichnis kopieren soll. Der Name "Ziel" hängt direkt vom Verzeichnis ab.MSBuild Kopiertask + Stapelverarbeitung für Korrelationsmetadaten

Beginnen wir mit einem Beispiel illustrieren:

|-\Source\MySolution.ProjectFoo\ 
| -- App.config.tpl 
| -- MySolution.ProjectFoo.exe 
| -- (Target) MySolution.ProjectFoo.exe.config.tpl 
|-\Source\MySolution.ProjectBar\ 
| -- App.config.tpl 
| -- MySolution.ProjectBar.exe 
| -- (Target) MySolution.ProjectBar.exe.config.tpl 

Ich habe den Bau begann meine ItemGroup wie folgt aus:

<ItemGroup> 
    <AppConfigTemplates Include="Source\**\App.config.tpl"> 
     <Correlate>%(RecursiveDir)</Correlate> 
    </AppConfigTemplates> 
    <ExeFiles Include="Source*\**\*.exe"> 
     <Correlate>%(RecursiveDir)</Correlate> 
    </ExeFiles> 
</ItemGroup> 

Ich hatte gehofft, in der Lage sein zu Charge auf der Correlate Metadateneigenschaft. Etwas wie:

<Copy Batch="%(Correlate)" SourceFiles="%(AppConfigTemplates.FullPath)" 
          DestinationFiles="%(ExeFiles.FullPath).config.tpl" /> 

Wie kann ich das erreichen?

Antwort

1

Es könnte möglich sein, separate Itemgroups so zu korrelieren, aber Sie müssen immer noch sicherstellen, dass sie die gleiche Anzahl von Items in der gleichen Reihenfolge haben (zB wenn es eine EXE aber keine .tpl und Vice gibt -versa), die wahrscheinlich unordentlich werden. Eine einfachere Lösung besteht darin, nur die exe-Dateien aufzulisten und die tpl-Datei (die einen festen Namen hat) zu kopieren, falls sie existiert:

+0

Das ist genau die Lösung, nach der ich suche! Vielen Dank! – MarioDS