Condividi tramite


Usare GLI SDK del 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 facoltativo Version . Ad esempio, è possibile specificare <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Avvertimento

Se si modifica il progetto per utilizzare gli elementi Import, assicurarsi di aggiungere sia gli import .props che .targets, e rimuovere l'SDK dall'elemento Project e dagli elementi Sdk. In caso contrario, le importazioni verranno duplicate e verrà visualizzato un MSB4011 avviso.

Come vengono risolti gli SDK del 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:

  • Resolver basato su NuGet che interroga i feed dei pacchetti configurati per trovare i pacchetti NuGet che corrispondono all'ID e alla versione dell'SDK specificato.

    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 risolutore individua gli SDK del progetto, come Microsoft.NET.Sdk e Microsoft.NET.Sdk.Web, che fanno parte del prodotto.

  • Sistema di risoluzione predefinito che risolve gli SDK installati con MSBuild.

Il resolver 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 diglobal.json è specificata una versione.