Korzystanie z zestawów SDK projektu MSBuild

Program MSBuild 15.0 wprowadził koncepcję "zestawu SDK projektu", który upraszcza korzystanie z zestawów programistycznych wymagających zaimportowania właściwości i obiektów docelowych.

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

Podczas oceny projektu program MSBuild dodaje niejawne importy w górnej i dolnej części pliku projektu:

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

Odwołuje się do zestawu SDK projektu

Istnieją trzy sposoby odwołowania się do zestawu SDK projektu:

Użyj atrybutu Sdk w elemecie <Project/>

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

Import niejawny jest dodawany do góry i dolnej części projektu, jak wspomniano wcześniej.

Aby określić określoną wersję zestawu SDK, dołącz go do atrybutu Sdk :

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

Korzystanie z elementu najwyższego poziomu <Sdk/>

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

Import niejawny jest dodawany do góry i dolnej części projektu, jak wspomniano wcześniej.

Atrybut Version nie jest wymagany.

Używanie elementu w <Import/> dowolnym miejscu w projekcie

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

Jawne uwzględnienie importu w projekcie umożliwia pełną kontrolę nad kolejnością.

W przypadku korzystania z <Import/> elementu można również określić opcjonalny Version atrybut. Można na przykład określić wartość <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Ostrzeżenie

Jeśli zmieniasz projekt w celu używania <Import/> elementów, upewnij się, że dodasz zestaw .props SDK i .targets je importujesz, a zestaw SDK zostanie usunięty z <Project/> elementu i <Sdk/> elementów. Nie można tego zrobić, spowoduje dwukrotne zaimportowanie i MSB4011 ostrzeżenie.

Jak są rozwiązywane zestawy SDK projektu

Podczas oceniania importu program MSBuild dynamicznie rozpoznaje ścieżkę do zestawu SDK projektu na podstawie podanej nazwy i wersji. Program MSBuild zawiera również listę zarejestrowanych narzędzi rozpoznawania zestawów SDK, które są wtyczkami, które lokalizują zestawy SDK projektu na maszynie. Te wtyczki obejmują:

  • Program rozpoznawania pakietów NuGet, który wysyła zapytania do skonfigurowanych źródeł danych pakietów dla pakietów NuGet, które pasują do określonego identyfikatora i wersji zestawu SDK.

    Ten program rozpoznawania nazw jest aktywny tylko wtedy, gdy określono opcjonalną wersję. Można go używać dla dowolnego niestandardowego zestawu SDK projektu.

  • Program rozpoznawania zestawu SDK platformy .NET, który rozwiązuje problemy z zestawami SDK programu MSBuild zainstalowanymi za pomocą zestawu .NET SDK.

    Ten program rozpoznawania lokalizuje zestawy SDK projektu, takie jak Microsoft.NET.Sdk i Microsoft.NET.Sdk.Web które są częścią produktu.

  • Domyślny program rozpoznawania rozpoznawania zestawów SDK zainstalowanych w programie MSBuild.

Narzędzie rozpoznawania zestawu SDK opartego na nuGet obsługuje określanie wersji w pliku global.json , co pozwala kontrolować wersję zestawu SDK projektu w jednym miejscu, a nie w każdym pojedynczym projekcie:

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

Podczas kompilacji można używać tylko jednej wersji każdego zestawu SDK projektu. Jeśli odwołujesz się do dwóch różnych wersji tego samego zestawu SDK projektu, program MSBuild emituje ostrzeżenie. Zaleca się, aby nie określać wersji w projektach, jeśli wersja jest określona w pliku global.json.