Microsoft Build Engine è una piattaforma per la compilazione di applicazioni. Questo motore, noto anche come MSBuild, fornisce uno schema XML per un file di progetto che controlla il modo in cui la piattaforma di compilazione elabora e compila software. Visual Studio usa MSBuild, ma MSBuild non dipende da Visual Studio. Richiamando msbuild.exe o dotnet build nel file del progetto o della soluzione, è possibile orchestrare e compilare prodotti in ambienti in cui Visual Studio non è installato.
Visual Studio usa MSBuild per caricare e compilare progetti gestiti. I file di progetto in Visual Studio (.csproj, vbproj, .vcxproje altri) contengono codice XML MSBuild eseguito durante la compilazione di un progetto nell'IDE. I progetti di Visual Studio importano tutte le impostazioni necessarie e i processi di compilazione per eseguire operazioni di sviluppo tipiche, ma è possibile estenderle o modificarle da Visual Studio o usando un editor di testo.
Per installare MSBuild in un sistema Windows che non dispone di Visual Studio, passare a Build Tools per Visual Studio nella pagina di download . L'installazione di MSBuild con questo metodo consente di MSBuild.exe.
Per .NET Core e .NET 5 o versione successiva, un altro modo per ottenere l'equivalente a MSBuild consiste nell'installare .NET SDK. Il comando di compilazione .NET dotnet build è disponibile con .NET SDK in macOS, Windows o Linux. Il comando di compilazione .NET dotnet build è un wrapper sottile sulla versione .NET Core di MSBuild.exe. È possibile usare il interfaccia della riga di comando di .NET Core, che usa MSBuild, per compilare progetti destinati a .NET Core e .NET 5 e versioni successive.
A partire da Visual Studio 2022, quando si compila in Visual Studio, viene usata la versione a 64 bit di MSBuild.
Per informazioni su MSBuild per C++, vedere MSBuild (C++).
Gli esempi seguenti illustrano quando è possibile eseguire compilazioni richiamando MSBuild dalla riga di comando anziché dall'IDE di Visual Studio.
Visual Studio non è installato.
Si vuole usare la versione a 64 bit di MSBuild e si usa Visual Studio 2019 o versioni precedenti. Questa versione di MSBuild in genere non è necessaria, ma consente a MSBuild di accedere a una quantità maggiore di memoria.
Si vuole eseguire una compilazione in più processi. Tuttavia, è possibile usare l'IDE per ottenere lo stesso risultato sui progetti in C++ e C#.
Si vuole modificare il sistema di compilazione. Ad esempio, è possibile abilitare le azioni seguenti:
Pre-elaborare i file prima di raggiungere il compilatore.
Copiare gli output di compilazione in una posizione diversa.
Creare file compressi dagli output di compilazione.
Eseguire un passaggio di post-elaborazione. Ad esempio, è possibile stampare un assembly con una versione diversa.
È possibile scrivere codice nell'IDE di Visual Studio, ma eseguire compilazioni usando MSBuild. In alternativa, è possibile compilare codice nell'IDE in un computer di sviluppo, ma eseguire MSBuild dalla riga di comando per compilare codice integrato da un repository di origine con collaborazione di più sviluppatori.
Nota
È possibile usare Azure Pipelines per compilare, testare e distribuire automaticamente l'applicazione. Il sistema di compilazione può eseguire automaticamente le compilazioni quando gli sviluppatori controllano il codice (ad esempio, come parte di una strategia di integrazione continua) o in base a una pianificazione (ad esempio, una build di test di verifica della compilazione notturna). Azure Pipelines compila il codice usando MSBuild. Per altre informazioni, vedere Azure Pipelines.
Per eseguire MSBuild al prompt dei comandi, passare un file di progetto a MSBuild.exe, insieme alle opzioni della riga di comando appropriate. Le opzioni della riga di comando consentono di impostare proprietà, eseguire destinazioni specifiche e impostare altre opzioni che controllano il processo di compilazione. Ad esempio, usare la sintassi della riga di comando seguente per compilare il file MyProj.proj con la proprietà Configuration impostata su Debug.
MSBuild non modifica il comportamento in base all'estensione del file, ma la convenzione consiste nell'usare le estensioni che terminano in proj, ad esempio .csproj, .vcxprojo .vbproj, per il file di input MSBuild principale, denominato "file di progetto".
Prima di scaricare un progetto, determinare l'attendibilità del codice.
Per .NET Core e .NET 5 o versione successiva, in genere si usa dotnet build per richiamare MSBuild. Vedere dotnet build. Se si installa solo .NET SDK e non Visual Studio o Visual Studio Build Tools, è possibile usare MSBuild solo tramite dotnet build.
La riga di comando dotnet build --help elenca le opzioni della riga di comando specifiche per dotnet build, non tutte le opzioni di MSBuild.exe, ma è comunque possibile usare tutte le opzioni della riga di comando elencate nel riferimento alla riga di comando di MSBuild. Le opzioni non elaborate da dotnet build vengono passate a MSBuild.
File di progetto
MSBuild usa un formato di file di progetto basato su XML semplice ed estendibile. Il formato di file di progetto MSBuild consente agli sviluppatori di descrivere gli elementi che devono essere compilati e di come devono essere compilati per diversi sistemi operativi e configurazioni. Inoltre, il formato di file di progetto consente agli sviluppatori di creare regole di compilazione riutilizzabili che possono essere fattorizzate in file separati in modo che le compilazioni possano essere eseguite in modo coerente in progetti diversi nel prodotto.
Il sistema di compilazione di Visual Studio archivia la logica specifica del progetto nel file di progetto stesso e usa file XML MSBuild importati con estensioni come .props e .targets per definire la logica di compilazione standard. I file .props definiscono le proprietà di MSBuild e .targets file definiscono le destinazioni MSBuild. Queste importazioni sono talvolta visibili nel file di progetto di Visual Studio, ma nei progetti più recenti, ad esempio .NET Core, .NET 5 e .NET 6, non vengono visualizzate le importazioni nel file di progetto. Viene invece visualizzato un riferimento ALL'SDK simile al seguente:
XML
<ProjectSdk="Microsoft.Net.Sdk">
Questi sono denominati progetti in stile SDK. Quando si fa riferimento a un SDK, ad esempio .NET SDK, le importazioni di .props e .target file vengono specificate in modo implicito dall'SDK.
Le proprietà rappresentano coppie chiave/valore che possono essere usate per configurare le compilazioni. Le proprietà vengono dichiarate creando un elemento con il nome della proprietà come figlio di un elemento PropertyGroup. Ad esempio, il codice seguente crea una proprietà denominata BuildDir con valore Build.
È possibile definire una proprietà in modo condizionale inserendo un attributo Condition nell'elemento . Il contenuto degli elementi condizionali viene ignorato a meno che la condizione non restituisca true. Nell'esempio seguente la proprietà Configuration viene definita se non è ancora stata definita.
È possibile fare riferimento alle proprietà in tutto il file di progetto usando la sintassi $(<PropertyName>). Ad esempio, è possibile fare riferimento alle proprietà negli esempi precedenti usando $(BuildDir) e $(Configuration).
Per ulteriori informazioni sulle proprietà, fare riferimento a proprietà MSBuild.
Elementi
Gli elementi sono input nel sistema di compilazione e in genere rappresentano i file. Gli elementi vengono raggruppati in tipi di elemento in base ai nomi degli elementi definiti dall'utente. Questi tipi di elemento possono essere usati come parametri per le attività, che usano i singoli elementi per eseguire i passaggi del processo di compilazione.
Gli elementi vengono dichiarati nel file di progetto creando un elemento con il nome del tipo di elemento come figlio di un elemento ItemGroup. Ad esempio, il codice seguente crea un tipo di elemento denominato Compile, che include due file.
È possibile fare riferimento ai tipi di elemento in tutto il file di progetto usando la sintassi @(<ItemType>). Ad esempio, al tipo di elemento nell'esempio si fa riferimento attraverso @(Compile).
In MSBuild i nomi degli elementi e degli attributi fanno distinzione tra maiuscole e minuscole. Tuttavia, i nomi di proprietà, elemento e metadati non sono. Nell'esempio seguente si crea il tipo di elemento Compile, comPileo qualsiasi variazione di maiuscole e assegna al tipo di elemento il valore "one.cs;two.cs".
Gli elementi possono essere dichiarati usando caratteri jolly e possono contenere metadati aggiuntivi per scenari di compilazione più avanzati. Per altre informazioni sugli elementi, vedere Items.
Attività
Le attività sono unità di codice eseguibile usate dai progetti MSBuild per eseguire operazioni di compilazione. Ad esempio, un'attività potrebbe compilare file di input o eseguire uno strumento esterno. Le attività possono essere riutilizzate e possono essere condivise da sviluppatori diversi in progetti diversi.
La logica di esecuzione di un'attività viene scritta nel codice gestito e mappata a MSBuild usando l'elemento UsingTask. È possibile scrivere la propria attività creando un tipo gestito che implementa l'interfaccia ITask. Per ulteriori informazioni su come scrivere compiti, vedere scrittura di compiti.
MSBuild include attività comuni che è possibile modificare in base alle proprie esigenze. Gli esempi sono Copy, che copia i file, MakeDir, che crea directory e Csc, che compila i file di codice sorgente di Visual C#. Per un elenco delle attività disponibili insieme alle informazioni sull'utilizzo, vedere Riferimento all'attività.
Un'attività viene eseguita in un file di progetto MSBuild creando un elemento con il nome dell'attività come figlio di un elemento Target. Le attività in genere accettano parametri, che vengono passati come attributi dell'elemento. Sia le proprietà di MSBuild che gli elementi possono essere usati come parametri. Ad esempio, il seguente codice chiama l'attività MakeDir e le passa il valore della proprietà BuildDir dichiarata nell'esempio precedente.
Per altre informazioni sulle attività, vedere Tasks.
Obiettivi
Consente di raggruppare le attività in un determinato ordine ed esporre sezioni del file di progetto come punti di ingresso nel processo di compilazione. Le destinazioni vengono spesso raggruppate in sezioni logiche per aumentare la leggibilità e consentire l'espansione. L'interruzione dei passaggi di compilazione nelle destinazioni consente di chiamare una parte del processo di compilazione da altre destinazioni senza copiare tale sezione di codice in ogni destinazione. Ad esempio, se diversi punti di ingresso nel processo di compilazione richiedono la compilazione di riferimenti, è possibile creare una destinazione che compila riferimenti e quindi eseguire tale destinazione da ogni punto di ingresso in cui è necessario.
Le destinazioni vengono dichiarate nel file di progetto usando l'elemento target. Ad esempio, il codice seguente crea un obiettivo denominato Compile, che quindi chiama l'attività Csc con l'elenco di elementi dichiarato nell'esempio precedente.
Negli scenari più avanzati, i target possono essere usati per descrivere le relazioni tra di loro ed eseguire l'analisi delle dipendenze in modo che intere sezioni del processo di build possano essere saltate se quel target è up-to-date. Per ulteriori informazioni sugli obiettivi, vedere Obiettivi.
Log di compilazione
È possibile registrare errori di compilazione, avvisi e messaggi nella console o in un altro dispositivo di output. Per altre informazioni, vedere Ottenere i log di compilazione con MSBuild.
Usare MSBuild in Visual Studio
Visual Studio usa il formato di file di progetto MSBuild per archiviare le informazioni di compilazione sui progetti gestiti. Le impostazioni del progetto aggiunte o modificate tramite l'interfaccia di Visual Studio vengono riflesse nel file .*proj generato per ogni progetto. Visual Studio usa un'istanza ospitata di MSBuild per compilare progetti gestiti. Ciò significa che un progetto gestito può essere compilato in Visual Studio o al prompt dei comandi (anche se Visual Studio non è installato) e i risultati saranno identici.
Usando Visual Studio, è possibile compilare un'applicazione da eseguire in una delle diverse versioni di .NET Framework o .NET Core, tra cui .NET 5 e versioni successive. Ad esempio, è possibile compilare un'applicazione da eseguire in .NET Framework 4 in una piattaforma a 32 bit ed è possibile compilare la stessa applicazione da eseguire in .NET Framework 4.8 in una piattaforma a 64 bit. La possibilità di compilare in più framework è chiamata multitargeting.
Questi sono alcuni dei vantaggi del multitargeting:
È possibile sviluppare applicazioni destinate a versioni precedenti di .NET Framework, ad esempio le versioni 3.5 e 4.7.2.
È possibile specificare come destinatario un profilo framework , che è un sottoinsieme predefinito del framework di destinazione.
Se viene rilasciato un Service Pack per la versione corrente di .NET Framework, è possibile specificarlo come destinazione.
Il multitargeting garantisce che un'applicazione usi solo le funzionalità disponibili nel framework di destinazione e nella piattaforma.
MSBuild offre supporto per un'ampia gamma di scenari di compilazione personalizzati. La maggior parte delle funzionalità predefinite può essere sottoposta a override o estesa. Consulta Personalizza la tua configurazione.
Accesso a MSBuild a livello di codice
Se si sviluppa uno strumento di compilazione, è possibile richiamare MSBuild a livello di codice da un'applicazione .NET. Usando l'API MSBuild, è possibile controllare tutti gli aspetti di un sistema di compilazione complesso. MSBuild fornisce un pacchetto NuGet con un'API completa (lo spazio dei nomi Microsoft.Build) che è possibile usare da un'applicazione .NET per questi scopi. Vedere Usare l'API MSBuild.
MSBuild è open source
MSBuild è un progetto open source che accetta i contributi utente nel repository GitHub MSBuild.
Introduce i blocchi predefiniti di MSBuild e illustra come scrivere, modificare ed eseguire il debug di progetti MSBuild senza chiudere l'IDE di Visual Studio.
concetti di MSBuild
Presenta i quattro blocchi predefiniti di MSBuild: proprietà, elementi, destinazioni e attività.
Viene illustrato come raggruppare le attività in un ordine specifico e abilitare le sezioni del processo di compilazione da chiamare nella riga di comando.
In questo percorso di apprendimento verrà descritto come collaborare con altri utenti per compilare, testare e verificare le applicazioni usando Azure Pipelines e GitHub.
Questa certificazione misura la capacità di eseguire le attività tecniche seguenti: Progettare ed implementare processi e comunicazioni, progettare e implementare il controllo del codice sorgente, progettare e implementare pipeline di compilazione e versione, sviluppare un piano di sicurezza e conformità e implementare una strategia di strumentazione.