Dela via


Använda MSBuild-projekt-SDK:er

Du kan referera till all bygginfrastruktur som krävs för en utvecklingsteknikstack, till exempel .NET SDK, genom att referera till en uppsättning egenskaper och mål som tillsammans kallas för ett projekt-SDK med dess specifika ID. ID:t refererar till en viss uppsättning .props filer som innehåller egenskapsdefinitioner och .targets filer som innehåller måldefinitioner. Du refererar till projektets SDK genom att använda Sdk attributet på top-nivå projektnoden.

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net46</TargetFramework>
    </PropertyGroup>
</Project>

Under utvärderingen av projektet lägger MSBuild till implicita importer överst och längst ned i projektfilen:

<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>

Det finns många SDK:er som distribueras av Microsoft. Projekt-SDK:t som refererades i föregående exempel har monikern Microsoft.NET.Sdk. De projekt-SDK:er som är associerade med .NET Core och .NET 5 och senare visas i översikten över .NET Project SDK.

Referera till ett projekt-SDK

Det finns tre sätt att referera till ett projekt-SDK:

Använd attributet Sdk för elementet Project

<Project Sdk="My.Custom.Sdk">
    ...
</Project>

En implicit import läggs till överst och längst ned i projektet enligt beskrivningen tidigare.

Om du vill ange en specifik version av SDK lägger du till den i Sdk attributet:

<Project Sdk="My.Custom.Sdk/1.2.3">
    ...
</Project>

Använd Sdk-elementet på den översta nivån

<Project>
    <Sdk Name="My.Custom.Sdk" Version="1.2.3" />
    ...
</Project>

En implicit import läggs till överst och längst ned i projektet enligt beskrivningen tidigare.

Attributet Version krävs inte.

Använd elementet Import var som helst i projektet

<Project>
    <PropertyGroup>
        <MyProperty>Value</MyProperty>
    </PropertyGroup>
    <Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
    ...
    <Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>

När du uttryckligen inkluderar importen i projektet har du fullständig kontroll över ordern.

När du använder elementet Import kan du också ange ett valfritt Version attribut. Du kan till exempel ange <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Varning

Om du ändrar ditt projekt till att använda Import-element, se till att du lägger till både .props och .targets-importer och att du tar bort SDK:t från Project-elementet och Sdk-elementen. Om du inte gör det kommer det resultera i dubbla importer och en MSB4011 varning.

Så här löses projekt-SDK:er

När du utvärderar importen löser MSBuild dynamiskt sökvägen till projekt-SDK:n baserat på det namn och den version som du angav. MSBuild har också en lista över registrerade SDK-matchare, som är plugin-program som hittar projekt-SDK:er på datorn. Dessa plugin-program omfattar:

  • En lösare som bygger på NuGet och som använder dina konfigurerade paketkällor för att söka efter NuGet-paket som matchar ID:t och versionen av det SDK som du har specificerat.

    Den här lösaren är endast aktiv om du har angett en frivillig version. Den kan användas för valfritt anpassat projekt-SDK.

  • En .NET SDK-matchare som löser MSBuild SDK:er som är installerade med .NET SDK.

    Den här lösaren letar upp projekt-SDK:er, t.ex. Microsoft.NET.Sdk och Microsoft.NET.Sdk.Web, som ingår i produkten.

  • En standardlösare som löser SDK:er som har installerats med MSBuild.

Den NuGet-baserade SDK-matcharen har stöd för att ange en version i global.json-filen , vilket gör att du kan styra projekt-SDK-versionen på ett ställe i stället för i varje enskilt projekt:

{
    "msbuild-sdks": {
        "My.Custom.Sdk": "5.0.0",
        "My.Other.Sdk": "1.0.0-beta"
    }
}

Endast en version av varje projekt-SDK kan användas under en version. Om du refererar till två olika versioner av samma projekt-SDK genererar MSBuild en varning. Vi rekommenderar att du inte anger en version i dina projekt om en version anges i filenglobal.json .