Destinazioni di MSBuildMSBuild targets

Le destinazioni raggruppano le attività in un determinato ordine e consentono di suddividere il processo di compilazione in unità più piccole.Targets group tasks together in a particular order and allow the build process to be factored into smaller units. Ad esempio, una destinazione può eliminare tutti i file presenti nella directory di output per preparare la compilazione, mentre un'altra compila gli input per il progetto e li inserisce nella directory vuota.For example, one target may delete all files in the output directory to prepare for the build, while another compiles the inputs for the project and places them in the empty directory. Per altre informazioni sulle attività, vedere Attività.For more information on tasks, see Tasks.

Dichiarare le destinazioni nel file di progettoDeclare targets in the project file

Per dichiarare le destinazioni in un file di progetto si usa l'elemento Target.Targets are declared in a project file with the Target element. Ad esempio, il codice XML seguente crea una destinazione denominata Construct che chiama l'attività Csc con il tipo di elemento Compile.For example, the following XML creates a target named Construct, which then calls the Csc task with the Compile item type.

<Target Name="Construct">
    <Csc Sources="@(Compile)" />
</Target>

Come le proprietà di MSBuild, le destinazioni possono essere ridefinite.Like MSBuild properties, targets can be redefined. Ad esempio,For example,

<Target Name="AfterBuild" >
    <Message Text="First occurrence" />
</Target>
<Target Name="AfterBuild" >
    <Message Text="Second occurrence" />
</Target>

Se si esegue AfterBuild, viene visualizzato solo "Second occurrence".If AfterBuild executes, it displays only "Second occurrence".

MSBuild si basa sull'ordine di importazione e l'ultima definizione di una destinazione diventa l'ultima definizione usata.MSBuild is import-order dependent, and the last definition of a target is the definition used.

Ordine di compilazione delle destinazioniTarget build order

Le destinazioni devono venire ordinate se l'input per una destinazione dipende dall'output di un'altra destinazione.Targets must be ordered if the input to one target depends on the output of another target.

Esistono diversi modi per specificare l'ordine di esecuzione delle destinazioni.There are several ways to specify the order in which targets run.

  • Destinazioni inizialiInitial targets

  • Destinazioni predefiniteDefault targets

  • Prima destinazioneFirst target

  • Dipendenze tra destinazioniTarget dependencies

  • BeforeTargets e AfterTargets (MSBuild 4.0)BeforeTargets and AfterTargets (MSBuild 4.0)

Una destinazione non viene mai eseguita due volte durante una compilazione, anche se da essa dipende una destinazione successiva nella compilazione.A target never runs twice during a single build, even if a subsequent target in the build depends on it. Il contributo della destinazione alla compilazione termina dopo che è stata eseguita.Once a target runs, its contribution to the build is complete.

Per dettagli e altre informazioni sull'ordine di compilazione delle destinazioni, vedere Ordine di compilazione delle destinazioni.For details and more information about the target build order, see Target build order.

Suddivisione in batch della destinazioneTarget batching

Un elemento di destinazione può avere un attributo Outputs che specifica i metadati nel formato %(<Metadata>).A target element may have an Outputs attribute which specifies metadata in the form %(<Metadata>). In questo caso MSBuild esegue la destinazione una volta per ogni valore univoco dei metadati, raggruppando o suddividendo in "batch" gli elementi che contengono quel valore dei metadati.If so, MSBuild runs the target once for each unique metadata value, grouping or "batching" the items that have that metadata value. Ad esempio,For example,

<ItemGroup>
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="Microsoft.CSharp">
      <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
</ItemGroup>
<Target Name="AfterBuild"
    Outputs="%(Reference.RequiredTargetFramework)">
    <Message Text="Reference:
      @(Reference->'%(RequiredTargetFramework)')" />
</Target>

suddivide in batch gli elementi di riferimento in base ai metadati RequiredTargetFramework.batches the Reference items by their RequiredTargetFramework metadata. L'output dell'esempio è simile al seguente:The output of the target looks like this:

Reference: 3.5;3.5
Reference: 4.0

La suddivisione in batch della destinazione viene usata raramente nelle compilazioni reali.Target batching is seldom used in real builds. La suddivisione in batch delle attività è più comune.Task batching is more common. Per altre informazioni, vedere Batch.For more information, see Batching.

Compilazioni incrementaliIncremental builds

Le compilazioni incrementali sono compilazioni ottimizzate in modo da non eseguire le destinazioni con file di output aggiornati rispetto ai file di input corrispondenti.Incremental builds are builds that are optimized so that targets with output files that are up-to-date with respect to their corresponding input files are not executed. Un elemento di destinazione può avere entrambi gli attributi Inputs e Outputs per indicare quali elementi la destinazione accetta come input e quali elementi genera come output.A target element can have both Inputs and Outputs attributes, indicating what items the target expects as input, and what items it produces as output.

Se tutti gli elementi di output sono aggiornati, MSBuild ignora la destinazione e questo migliora notevolmente la velocità di compilazione.If all output items are up-to-date, MSBuild skips the target, which significantly improves the build speed. Questa operazione è definita compilazione incrementale della destinazione.This is called an incremental build of the target. Se solo alcuni file sono aggiornati, MSBuild esegue la destinazione senza gli elementi aggiornati.If only some files are up-to-date, MSBuild executes the target without the up-to-date items. Questa operazione è definita compilazione incrementale parziale della destinazione.This is called a partial incremental build of the target. Per altre informazioni, vedere Compilazioni incrementali.For more information, see Incremental builds.

Vedere ancheSee also