Condividi tramite


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 e Microsoft.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.