Copiare Files dopo la Compilazione in Visual Studio
Cristian Merighi ()

Come copiare files tra progetti utilizzando MSBuild.
Questo articolo è da considerarsi obsoleto. Alcune funzionalità potrebbero non essere più disponibili e non è possibile aggiungere commenti.
Un «quickie» su come sfruttare Visual Studio (e MSBuild) per trasferire files
dopo la compilazione di un progetto.
Per fare ciò è necessario modificare la struttura file di progetto. Come? Penso sia già noto a parecchi, in ogni caso rinfreschiamo nozioni probabilmente già acquisite:
- Tasto destro sul nome del progetto in questione (quello che contiene i files da trasferire).
- Selezionare la voce Unload Project.
- Nuovamente tasto destro sul nome del progetto (etichettato ora come unavailable).
- Selezionare la voce Edit [Nome_Progetto].[cs|vb]proj.
Vi trovate di fronte ad un file xml con un nodo radice Project (o, per essere più rigorosi {http://schemas.microsoft.com/developer/msbuild/2003{Project}}).
Aggiungete a tale nodo il blocco di markup riportato qui sotto:
Markup
- <PropertyGroup>
- <ScriptsDestinationDirectory>E:\Components\Pacem 5\Pacem.TestWebsite\Scripts</ScriptsDestinationDirectory>
- <ScriptsSourceDirectory>Client</ScriptsSourceDirectory>
- </PropertyGroup>
- <Target Name="AfterBuild">
- <CreateItem Include="$(ScriptsSourceDirectory)\**\*.*">
- <Output TaskParameter="Include" ItemName="ScriptsFilesToCopy" />
- </CreateItem>
- <Copy SourceFiles="@(ScriptsFilesToCopy)" DestinationFiles="@(ScriptsFilesToCopy->'$(ScriptsDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" />
- </Target>
Da evidenziare nel blocco riportato sono:
- Il nodo PropertyGroup dove definiamo le variabili coinvolte, in questo caso ScriptsDestinationDirectory (percorso fisico della cartella di destinazione) e ScriptsSourceDirectory (percorso relativo della cartella sorgente appartenente al progetto, in questo caso la cartella con nome "Client").
- Il nodo Target @Name="AfterBuild", dove incorporiamo con una serie di riferimenti un Output Element.
- L'esecuzione del trasferimento è poi descritta nel nodo Copy.
Spero possa essere stata una lettura utile...
Update
È possibile ottenere risultati simili utilizzando - nel pannello delle proprietà del progetto - la command-line per il Post-build del progetto stesso.
La sintassi per tale comando è il seguente (nell'esempio sono filtrati ricorsivamente i soli files con estensione .js):
xcopy "$(ProjectDir)\Client\*.js" "$(SolutionDir)\Pacem.TestWebsite\Scripts\" /s /i /y
Take care. Bye.