Move (attività)

Sposta i file in una nuova posizione.

Parametri

Nella tabella che segue vengono descritti i parametri dell'attività Move.

Parametro Descrizione
DestinationFiles Parametro di output ITaskItem[] facoltativo.

Specifica l'elenco di file in cui spostare i file di origine. Si presume che esista un mapping uno-a-uno tra questo elenco e quello specificato nel parametro SourceFiles. In altri termini, il primo file specificato in SourceFiles verrà spostato nel primo percorso specificato in DestinationFiles e così via.
DestinationFolder Parametro ITaskItem facoltativo.

Specifica la directory in cui spostare i file.
MovedFiles Parametro di output ITaskItem[] facoltativo.

Contiene gli elementi spostati correttamente.
OverwriteReadOnlyFiles Parametro Boolean facoltativo.

Se true, sovrascrive i file anche se sono contrassegnati come di sola lettura.
SourceFiles Parametro ITaskItem[] obbligatorio.

Specifica i file da spostare.

Osservazioni:

È necessario specificare il parametro DestinationFolder o DestinationFiles, ma non entrambi. Se vengono specificati entrambi, l'attività avrà esito negativo e verrà registrato un errore.

L'attività Move crea le cartelle necessarie per i file di destinazione desiderati.

Oltre a usare i parametri elencati nella tabella, questa attività eredita i parametri dalla classe TaskExtension che a sua volta eredita dalla classe Task. Per un elenco di questi parametri aggiuntivi e le rispettive descrizioni, vedere TaskExtension Base Class.

Esempi

L'esempio seguente sposta i file dalla cartella di origine alla cartella dest . Le cartelle di origine e dest sono relative al file di progetto. Se il problema non esiste, viene creato.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <FilesToMove Include="source\*.*"/>
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
     <Message Text="Moving Files @(FilesToMove)"/>
     <Move SourceFiles="@(FilesToMove)" DestinationFolder="dest">
       <Output 
          TaskParameter="DestinationFiles"
          ItemName="FilesWritten"/>
     </Move>
     <Message Text="@(FilesWritten)"/>
  </Target>
</Project>

L'esempio seguente rinomina i file in base a un modello di sostituzione. Presuppone che i file come files\original1.txt e files\original2.txt esistano e original.txt esista a livello di progetto prima dell'esecuzione. Si noti l'uso della funzione Replace elemento stringa per modificare i nomi file. Vedere Funzioni dell'elemento.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <FilesToRename Include="files\original*" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Rename one file"/>
    <Move SourceFiles="original.txt" DestinationFiles="new.txt"/>
    <Message Text="Renaming files @(FilesToRename)"/>
    <Move SourceFiles="@(FilesToRename)" DestinationFiles="@(FilesToRename->Replace('original', 'new'))" />
  </Target>

</Project>

Gli esempi seguenti rinominano tutti i file in un sottoalbero completo che contiene il testo di ricerca e il testo di sostituzione nelle proprietà di MSBuild. Mostra l'uso della funzione Replace della proprietà stringa per modificare il nome file. Viene inoltre illustrato l'uso dell'opzione OverwriteReadOnlyFiles .

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <SearchText>original</SearchText>
    <ReplaceText>new</ReplaceText>
  </PropertyGroup>

  <ItemGroup>
    <FilesToRename Include="files\**\*$(SearchText)*" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Renaming files @(FilesToRename)"/>
    <Move SourceFiles="@(FilesToRename)"
          OverwriteReadOnlyFiles="true"
          DestinationFiles="@(FilesToRename->Replace($(SearchText), $(ReplaceText)))" />
  </Target>

</Project>

Potrebbe risultare utile usare i metadati degli elementi per costruire l'elenco di file di destinazione. In questo caso, i metadati %(RelativeDir) degli elementi noti e %(Filename) vengono a cui viene fatto riferimento per costruire i nomi file modificati, in questo caso per modificare le estensioni per qualsiasi file in un sottoalbero con l'estensione .txt in .orig.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <NewExtension>orig</NewExtension>
  </PropertyGroup>

  <ItemGroup>
    <FilesToRename Include="files\**\*.txt" />
    <RenamedFiles Include="@(FilesToRename -> '%(RelativeDir)%(Filename).$(NewExtension)')" />    
  </ItemGroup>

  <Target Name="MoveFiles" AfterTargets="Build">
    <Message Text="Renaming files @(FilesToRename) to @(RenamedFiles)"/>
    <Move SourceFiles="@(FilesToRename)"
          OverwriteReadOnlyFiles="true"
          DestinationFiles="@(RenamedFiles)" />
  </Target>

</Project>

Vedi anche