Attività MSBuild
Aggiornamento: novembre 2007
Compila progetti MSBuild da un altro progetto MSBuild.
Parametri
Nella tabella riportata di seguito sono descritti i parametri dell'attività MSBuild.
Parametro |
Descrizione |
---|---|
BuildInParallel |
Parametro Boolean facoltativo. Se true, i progetti specificati nel parametro Projects vengono compilati in parallelo, se consentito. Il valore predefinito è true. |
Projects |
Parametro ITaskItem[] obbligatorio. Specifica i file di progetto da generare. |
Properties |
Parametro String facoltativo. Si tratta di un elenco delimitato da punti e virgola di coppie di nomi e valori di proprietà da applicare come proprietà globali al progetto figlio. Dal punto di vista funzionale, la specifica di questo parametro equivale a impostare le proprietà mediante l'opzione /property durante la compilazione con MSBuild.exe. Ad esempio: Properties="Configuration=Debug;Optimize=$(Optimize)" Quando si passano proprietà al progetto tramite il parametro Properties, MSBuild crea un'istanza nuova del progetto anche se il file di progetto è già stato caricato. Quando l'istanza nuova del progetto è stata creata, MSBuild la tratta come un progetto diverso che ha proprietà globali diverse e che può essere compilato in parallelo con le altre istanze del progetto. Ad esempio, una configurazione di rilascio compilata contemporaneamente a una configurazione di debug. |
ToolsVersion |
Parametro String facoltativo. Consente ad un'attività MSBuild di compilare un progetto che utilizza una versione del .NET Framework diversa da quella specificata nel progetto. I valori validi sono 2.0, 3.0 e 3.5. Il valore predefinito è 3.5. |
RebaseOutputs |
Parametro Boolean facoltativo. Se il parametro è impostato su true, i percorsi relativi degli elementi di output di destinazione dei progetti generati vengono modificati in base alla posizione del progetto chiamante. Il valore predefinito è false. |
RunEachTargetSeparately |
Parametro Boolean facoltativo. Se true, l'attività MSBuild richiama ogni destinazione nell'elenco passato a MSBuild una alla volta, anziché contemporaneamente. Impostando questo parametro su true, le destinazioni successive vengono richiamate anche se le precedenti chiamate alle destinazioni non sono riuscite. In caso contrario, un errore di compilazione arresterebbe la chiamata di tutte le destinazioni successive. Il valore predefinito è false. |
StopOnFirstFailure |
Parametro Boolean facoltativo. Se il parametro è impostato su true, viene forzata l'interruzione della compilazione dei progetti rimanenti nel momento in cui uno potrebbe non funzionare. |
TargetOutputs |
Parametro di output di sola lettura ITaskItem[] facoltativo. Restituisce gli output delle destinazioni generate di tutti i file di progetto. Vengono restituiti solo gli output delle destinazioni specificate, non quelli che possono essere presenti nelle destinazioni da cui dipendono quelle specificate. Il parametro TargetOutputs contiene anche i seguenti metadati:
Nota Per identificare individualmente gli output di ciascun file di progetto o destinazione, è necessario eseguire l'attività MSBuild separatamente per ogni file di progetto o destinazione. Se si esegue l'attività MSBuild una sola volta per generare tutti i file di progetto, gli output di tutte le destinazioni vengono raccolti in un'unica matrice. |
Targets |
Parametro String facoltativo. Specifica le destinazioni da generare nei file di progetto. Utilizzare un punto e virgola per separare un elenco di nomi di destinazione. Se nell'attività MSBuild non viene specificata alcuna destinazione, vengono generate le destinazioni predefinite specificate nei file di progetto. Nota È necessario che le destinazioni siano incluse in tutti i file di progetto. In caso contrario, si verifica un errore di generazione. |
Note
Anziché utilizzare Attività Exec per avviare MSBuild.exe, questa attività utilizza lo stesso processo MSBuild per la compilazione di progetti figlio. L'elenco di destinazioni già generate che è possibile ignorare viene condiviso dalle generazioni padre e figlio. Questa attività risulta inoltre più rapida perché non vengono creati nuovi processi MSBuild.
Mediante questa attività è possibile elaborare non solo file di progetto, ma anche file di soluzione.
Qualsiasi configurazione richiesta da MSBuild per consentire la compilazione simultanea dei progetti, anche se la configurazione utilizza un'infrastruttura remota (ad esempio, porte, protocolli, timeout, tentativi e così via), deve essere resa configurabile utilizzando un file di configurazione. Se possibile, gli elementi di configurazione devono poter essere specificati come parametri sull'attività MSBuild.
A partire da MSBuild 3.5, i progetti di soluzione evidenziano i TargetOutputs da tutti i sottoprogetti compilati.
Passaggio delle proprietà ai progetti
Nelle versioni di MSBuild precedenti a MSBuild 3.5, il passaggio di insiemi di proprietà diversi ai vari progetti elencati nell'elemento MSBuild era un'operazione complicata. Se è stato utilizzato l'attributo Properties dell'Attività MSBuild, l'impostazione è stata applicata a tutti i progetti compilati a meno che l'Attività MSBuild non sia stata eseguita in batch e non siano state fornite su condizione proprietà diverse per ogni progetto nell'elenco degli elementi.
Tuttavia, MSBuild 3.5 fornisce due nuovi elementi riservati dei metadati, Properties e AdditionalProperties che forniscono una modalità flessibile per passare proprietà diverse per progetti diversi compilati mediante l'Attività MSBuild.
Nota
Questi nuovi elementi dei metadati sono applicabili solo agli elementi passati nell'attributo Projects dell'Attività MSBuild.
Vantaggi della compilazione multiprocessore
Uno dei principali vantaggi derivanti dall'utilizzo di questi nuovi metadati si può constatare quando si compilano i progetti in parallelo su un sistema multiprocessore. I metadati consentono di consolidare tutti i progetti in una sola chiamata dell'Attività MSBuild senza dover eseguire alcuna attività MSBuild batch o condizionale. Quando si chiama una sola Attività MSBuild, tutti i progetti elencati nell'attributo Projects saranno compilati in parallelo. Tuttavia, solo se l'attributo BuildInParallel=true è presente in Attività MSBuild. Per ulteriori informazioni, vedere Compilazione per più processori.
Metadati delle proprietà
In uno scenario comune, più file della soluzione vengono compilati utilizzando l'Attività MSBuild esclusivamente tramite configurazioni della build differenti. È possibile che si debba compilare la soluzione a1 utilizzando la configurazione di debug e la soluzione a2 utilizzando la configurazione di rilascio. In MSBuild 2.0, il file di progetto sarebbe come segue:
Nota
Nell'esempio seguente, "…" rappresenta i file della soluzione aggiuntivi.
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln…" Properties="Configuration=Debug"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
</Target>
</Project>
Utilizzando i metadati Properties, tuttavia, è possibile semplificare l'operazione al fine di utilizzare una sola Attività MSBuild, come mostrato di seguito:
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
-oppure-
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…"/>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Debug"/>
</Target>
</Project>
Metadati AdditionalProperties
Si consideri lo scenario seguente in cui si stanno compilando due file di soluzione utilizzando l'Attività MSBuild; entrambi utilizzano la configurazione di rilascio, ma uno impiega l'architettura x86 e l'altro l'architettura ia64. In MSBuild 2.0, sarebbe necessario creare più istanze dell'Attività MSBuild: una per compilare il progetto utilizzando la configurazione di rilascio con l'architettura x86, l'altro utilizzando la configurazione di rilascio con l'architettura ia64. Il file di progetto sarebbe come segue:
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln…" Properties="Configuration=Release;
Architecture=x86"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release;
Architecture=ia64"/>
</Target>
</Project>
Utilizzando i metadati AdditionalProperties, è possibile semplificare l'operazione al fine di usare una sola Attività MSBuild come indicato di seguito:
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…">
<AdditionalProperties>Architecture=x86
</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<AdditionalProperties>Architecture=ia64
</AdditionalProperties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Release"/>
</Target>
</Project>
Esempio
Nell'esempio riportato di seguito l'attività MSBuild viene utilizzata per generare i progetti specificati dall'insieme di elementi ProjectReferences. Gli output di destinazione ottenuti vengono archiviati nell'insieme di elementi AssembliesBuiltByChildProjects.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReferences Include="*.*proj" />
</ItemGroup>
<Target Name="BuildOtherProjects">
<MSBuild
Projects="@(ProjectReferences)"
Targets="Build">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
</Target>
</Project>