Condividi tramite


Procedura: compilare gli stessi file di origine con opzioni diverse

Aggiornamento: novembre 2007

Quando si generano progetti, è spesso necessario compilare gli stessi componenti con opzioni di generazione diverse. È ad esempio possibile creare una build di debug con informazioni sui simboli o una build di rilascio senza informazioni sui simboli, ma con le ottimizzazioni attivate. È inoltre possibile compilare un progetto da eseguire su una piattaforma specifica, ad esempio x86 o x64. In tutti questi casi, la maggior parte delle opzioni di compilazione rimane invariata. Vengono modificate solo alcune opzioni per controllare la configurazione della build. MSBuild consente di utilizzare proprietà e condizioni per creare varie configurazioni della build.

Utilizzo delle proprietà per modificare i progetti

L'elemento Property definisce una variabile a cui si fa riferimento più volte in un file di progetto, ad esempio il percorso di una directory temporanea, o che consente di impostare i valori delle proprietà utilizzate in varie configurazioni, quali build di debug e di rilascio. Per ulteriori informazioni sulle proprietà, vedere Proprietà di MSBuild.

Le proprietà possono essere utilizzate per modificare la configurazione di una generazione senza dover apportare modifiche al file di progetto. L'attributo Condition dell'elemento Property e dell'elemento PropertyGroup consente di modificare il valore delle proprietà. Per ulteriori informazioni sulle condizioni di MSBuild, vedere Condizioni di MSBuild.

Per impostare un gruppo di proprietà basate su un'altra proprietà

  • Utilizzare un attributo Condtion di un elemento PropertyGroup simile a quello riportato di seguito:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>
    

Per definire una proprietà basata su un'altra proprietà

  • Utilizzare un attributo Condition di un elemento Property simile a quello riportato di seguito:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    

Specifica delle proprietà sulla riga di comando

Dopo aver scritto il file di progetto in modo che accetti più configurazioni, queste devono poter essere modificate a ogni compilazione del progetto. MSBuild offre questa possibilità, poiché consente di specificare le proprietà dalla riga di comando utilizzando l'opzione /property o /p.

Per impostare una proprietà di progetto sulla riga di comando

  • Utilizzare l'opzione /property con la proprietà e il relativo valore. Ad esempio:

    msbuild file.proj /property:Flavor=Debug

    -oppure-

    Msbuild file.proj /p:Flavor=Debug

Per specificare più proprietà di progetto sulla riga di comando

  • Utilizzare più volte l'opzione /property o /p con la proprietà e i relativi valori oppure utilizzare una sola volta l'opzione /property o /p e separare le varie proprietà con punti e virgola (;). Ad esempio:

    msbuild file.proj /p:Flavor=Debug;Platform=x86

    -oppure-

    msbuild file.proj /p:Flavor=Debug /p:Platform=x86

Anche le variabili di ambiente sono considerate come proprietà e vengono automaticamente incorporate da MSBuild. Per ulteriori informazioni sull'utilizzo delle variabili di ambiente, vedere Procedura: utilizzare le variabili di ambiente in una compilazione.

Nota:

Il valore della proprietà specificato sulla riga di comando ha la precedenza su qualsiasi altro valore impostato per la stessa proprietà nel file di progetto. A sua volta, il valore indicato nel file di progetto ha la precedenza sul valore della variabile di ambiente.

Esempio

Nell'esempio di codice riportato di seguito il progetto "Hello World" contiene due nuovi gruppi di proprietà che possono essere utilizzati per creare una build di debug e una build di rilascio.

Per generare la versione di debug del progetto, digitare:

msbuild consolehwcs1.proj /p:flavor=debug

Per generare la versione finale del progetto, digitare:

msbuild consolehwcs1.proj /p:flavor=retail

<Project DefaultTargets = "Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Sets the default flavor of an environment variable called 
    Flavor is not set or specified on the command line -->
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
    </PropertyGroup>

    <!-- Define the DEBUG settings -->
    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>

    <!-- Define the RETAIL settings -->
    <PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
        <DebugType>pdbonly</DebugType>
        <Optimize>yes</Optimize>
    </PropertyGroup>

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "consolehwcs1.cs"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual C# compilation using input files
        of type CSFile -->
        <CSC  Sources = "@(CSFile)"
            DebugType="$(DebugType)"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe" >

            <!-- Set the OutputAssembly attribute of the CSC
            task to the name of the executable file that is 
            created -->
            <Output TaskParameter="OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Vedere anche

Concetti

MSBuild

Altre risorse

Concetti relativi a MSBuild

Riferimenti a MSBuild