Share via


Procedura: utilizzare la stessa destinazione in più file di progetto

Se sono stati creati più file di progetto di MSBuild, potrebbe essere necessario utilizzare le stesse attività e destinazioni in file di progetto diversi. Anziché includere la descrizione completa di tali attività o destinazioni in ogni file di progetto, è possibile salvare una destinazione in un file di progetto separato e quindi importarlo in qualsiasi altro progetto in cui si desidera utilizzare la destinazione.

Utilizzo dell'elemento Import

L'elemento Import viene utilizzato per inserire un file di progetto in un altro file di progetto. Il file di progetto importato deve essere un file di progetto di MSBuild valido e deve contenere codice XML in formato corretto. L'attributo Project specifica il percorso del file di progetto importato. Per ulteriori informazioni sull'elemento Import, vedere Elemento Import (MSBuild).

Per importare un progetto

  1. Nel file di progetto di importazione definire tutte le proprietà e gli elementi utilizzati come parametri per le proprietà e gli elementi del progetto importato.

  2. Utilizzare l'elemento Import per importare il progetto. Di seguito è riportato un esempio:

    <Import Project="MyCommon.targets"/>

  3. Dopo l'elemento Import, definire tutte le proprietà e gli elementi che devono eseguire l'override delle definizioni predefinite delle proprietà e degli elementi presenti nel progetto importato.

Ordine di valutazione

Quando MSBuild raggiunge un elemento Import, il progetto importato viene efficacemente inserito nel progetto di importazione nella stessa posizione dell'elemento Import. Di conseguenza, la posizione dell'elemento Import può influire sui valori delle proprietà e degli elementi. È quindi importante conoscere le proprietà e gli elementi impostati dal progetto importato e le proprietà e gli elementi che tale progetto utilizza.

Quando si compila il progetto, vengono valutate prima tutte le proprietà e quindi gli elementi. Il codice XML riportato di seguito, ad esempio, definisce il file di progetto importato MyCommon.targets:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyCommon</Name>
    </PropertyGroup>

    <Target Name="Go">
        <Message Text="Name=$(Name)"/>
    </Target>
</Project>

Il codice XML riportato di seguito definisce MyApp.proj, che esegue l'importazione di MyCommon.targets:

<Project
    DefaultTargets="Go"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Quando si compila il progetto, viene visualizzato il messaggio seguente:

Name="MyCommon"

Poiché il progetto viene importato dopo aver definito la proprietà Name in MyApp.proj, la definizione di Name in MyCommon.targets esegue l'override della definizione presente in MyApp.proj. Se il progetto venisse importato prima di definire la proprietà Name, la compilazione comporterebbe la visualizzazione del messaggio seguente:

Name="MyApp"

Utilizzare l'approccio riportato di seguito durante l'importazione dei progetti

  1. Nel file di progetto definire tutte le proprietà e gli elementi utilizzati come parametri per le proprietà e gli elementi del progetto importato.

  2. Importare il progetto.

  3. Nel file di progetto definire tutte le proprietà e gli elementi che devono eseguire l'override delle definizioni predefinite delle proprietà e degli elementi del progetto importato.

Esempio

Nell'esempio di codice riportato di seguito viene illustrato il file MyCommon.targets importato dal secondo esempio di codice. Il file .targets valuta le proprietà ricavate dal progetto di importazione per configurare la compilazione.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

Nell'esempio di codice riportato di seguito viene importato il file MyCommon.targets.

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Vedere anche

Riferimenti

Elemento Import (MSBuild)

Concetti

Destinazioni di MSBuild