Delen via


MSBuild-project-SDK's gebruiken

U kunt verwijzen naar alle build-infrastructuur die is vereist voor een ontwikkelingstechnologiestack, zoals de .NET SDK, door te verwijzen naar een set eigenschappen en doelen die gezamenlijk een project-SDK worden genoemd door de specifieke id. De id verwijst naar een bepaalde set .props bestanden die eigenschapsdefinities bevatten en .targets bestanden die doeldefinities bevatten. U verwijst naar een project-SDK met behulp van het Sdk kenmerk op het projectknooppunt op het hoogste niveau.

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

Tijdens de evaluatie van het project voegt MSBuild impliciete import toe aan de bovenkant en onderkant van het projectbestand:

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

Er zijn veel SDK's gedistribueerd door Microsoft. De project-SDK waarnaar in het vorige voorbeeld wordt verwezen, heeft de moniker Microsoft.NET.Sdk. De project-SDK's die zijn gekoppeld aan .NET Core en .NET 5 en hoger, worden vermeld in het overzicht van .NET Project SDK.

Verwijzen naar een project-SDK

Er zijn drie manieren om te verwijzen naar een project-SDK:

Sdk Het kenmerk voor het Project element gebruiken

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

Er wordt een impliciete import toegevoegd aan de boven- en onderkant van het project, zoals eerder is besproken.

Als u een specifieke versie van de SDK wilt opgeven, voegt u deze toe aan het Sdk kenmerk:

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

Gebruik het element op het hoogste niveau Sdk

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

Er wordt een impliciete import toegevoegd aan de boven- en onderkant van het project, zoals eerder is besproken.

Het Version kenmerk is niet vereist.

Import Het element overal in uw project gebruiken

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

Wanneer u de import in uw project expliciet opneemt, hebt u volledige controle over de bestelling.

Wanneer u het Import element gebruikt, kunt u ook een optioneel Version kenmerk opgeven. U kunt bijvoorbeeld opgeven <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Waarschuwing

Als u uw project wijzigt om Import elementen te gebruiken, moet u zowel .props als .targets importbewerkingen toevoegen en de SDK verwijderen uit het Project element en de Sdk elementen. Als u dit niet doet, zullen er dubbele imports zijn en een MSB4011 waarschuwing.

Hoe project-SDK's worden bepaald

Bij het evalueren van de import wordt het pad naar de project-SDK dynamisch bepaald op basis van de naam en versie die u hebt opgegeven. MSBuild heeft ook een lijst met geregistreerde SDK-resolvers, die invoegtoepassingen zijn waarmee project-SDK's op uw computer worden gevonden. Deze invoegtoepassingen zijn onder andere:

  • Een op NuGet gebaseerde resolver die query's op uw geconfigureerde pakketfeeds opvraagt voor NuGet-pakketten die overeenkomen met de id en versie van de SDK die u hebt opgegeven.

    Deze resolver is alleen actief als u een optionele versie hebt opgegeven. Deze kan worden gebruikt voor elke aangepaste project-SDK.

  • Een .NET SDK-resolver waarmee MSBuild SDK's worden omgezet die zijn geïnstalleerd met de .NET SDK.

    Deze resolver zoekt project-SDK's zoals Microsoft.NET.Sdk en Microsoft.NET.Sdk.Web die deel uitmaken van het product.

  • Een standaard resolver waarmee SDK's worden omgezet die zijn geïnstalleerd met MSBuild.

De op NuGet gebaseerde SDK-resolver ondersteunt het opgeven van een versie in het global.json-bestand , waarmee u de project-SDK-versie op één plaats kunt beheren in plaats van in elk afzonderlijk project:

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

Er kan slechts één versie van elke project-SDK worden gebruikt tijdens een build. Als u naar twee verschillende versies van dezelfde project-SDK verwijst, verzendt MSBuild een waarschuwing. U wordt aangeraden geen versie in uw projecten op te geven als er een versie is opgegeven in het global.json-bestand .