Usare SDK di progetto MSBuild
È possibile fare riferimento a tutte le infrastrutture di compilazione necessarie per uno stack di tecnologie di sviluppo, ad esempio .NET SDK, semplicemente facendo riferimento a un set di proprietà e destinazioni note collettivamente come SDK di progetto in base al relativo ID specifico. L'ID fa riferimento a un particolare set di file che contengono definizioni di .props
proprietà e .targets
file che contengono definizioni di destinazione. Per fare riferimento a un SDK di progetto, usare l'attributo Sdk
nel nodo di progetto di primo livello.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Durante la valutazione del progetto, MSBuild aggiunge importazioni implicite nella parte superiore e inferiore del file di progetto:
<Project>
<!-- Implicit top import -->
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- Implicit bottom import -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
Sono disponibili molti SDK distribuiti da Microsoft. L'SDK del progetto a cui si fa riferimento nell'esempio precedente ha il moniker Microsoft.NET.Sdk
. Gli SDK di progetto associati a .NET Core e .NET 5 e versioni successive sono elencati in Panoramica di .NET Project SDK.
Fare riferimento a un SDK di progetto
Esistono tre modi per fare riferimento a un SDK di progetto:
Usare l'attributo Sdk
nell'elemento <Project/>
<Project Sdk="My.Custom.Sdk">
...
</Project>
Un'importazione implicita viene aggiunta alla parte superiore e inferiore del progetto, come illustrato in precedenza.
Per specificare una versione specifica dell'SDK, aggiungerla all'attributo Sdk
:
<Project Sdk="My.Custom.Sdk/1.2.3">
...
</Project>
Usare l'elemento di primo livello <Sdk/>
<Project>
<Sdk Name="My.Custom.Sdk" Version="1.2.3" />
...
</Project>
Un'importazione implicita viene aggiunta alla parte superiore e inferiore del progetto, come illustrato in precedenza.
L'attributo Version
non è obbligatorio.
Usare l'elemento <Import/>
in qualsiasi punto del progetto
<Project>
<PropertyGroup>
<MyProperty>Value</MyProperty>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
...
<Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>
Quando si includono in modo esplicito le importazioni nel progetto, si ha il controllo completo sull'ordine.
Quando si usa l'elemento <Import/>
è possibile specificare anche un attributo Version
facoltativo. Ad esempio, è possibile specificare <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />
.
Avviso
Se si modifica il progetto in modo da usare <Import/>
gli elementi, assicurarsi di aggiungere e .targets
.props
importare e rimuovere l'SDK dall'elemento <Project/>
e <Sdk/>
dagli elementi. In caso contrario, verranno generate importazioni raddoppiate e un MSB4011
avviso.
Come vengono risolti gli SDK di progetto
Quando si valuta l'importazione, MSBuild risolve in modo dinamico il percorso dell'SDK del progetto in base al nome e alla versione specificati. MSBuild include anche un elenco di resolver SDK registrati, che sono plug-in che individuano gli SDK di progetto nel computer. Questi plug-in includono:
Un resolver basato su NuGet che recupera i feed di pacchetto configurati per i pacchetti NuGet corrispondenti all'ID e alla versione dell'SDK specificati.
Questo sistema di risoluzione è attivo solo se è stata specificata una versione facoltativa. Può essere usato per qualsiasi SDK di progetto personalizzato.
Un resolver .NET SDK che risolve gli SDK di MSBuild installati con .NET SDK.
Questo sistema di risoluzione individua gli SDK del progetto, ad
Microsoft.NET.Sdk
esempio eMicrosoft.NET.Sdk.Web
che fanno parte del prodotto.Un resolver predefinito che risolve gli SDK che sono stati installati con MSBuild.
Il sistema di risoluzione SDK basato su NuGet supporta la specifica di una versione nel file global.json , che consente di controllare la versione dell'SDK del progetto in un'unica posizione anziché in ogni singolo progetto:
{
"msbuild-sdks": {
"My.Custom.Sdk": "5.0.0",
"My.Other.Sdk": "1.0.0-beta"
}
}
Durante una compilazione, è possibile usare una sola versione di ogni SDK di progetto. Se si fa riferimento a due versioni diverse dello stesso SDK del progetto, MSBuild genera un avviso. È consigliabile non specificare una versione nei progetti se nel file di global.json è specificata una versione.