Menggunakan SDK proyek MSBuild

MSBuild 15.0 memperkenalkan konsep "project SDK", yang menyederhanakan penggunaan kit pengembangan perangkat lunak yang memerlukan properti dan target untuk diimpor.

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

Selama evaluasi proyek, MSBuild menambahkan impor implisit di bagian atas dan bawah file proyek:

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

Mereferensikan SDK proyek

Ada tiga cara untuk mereferensikan SDK proyek:

Sdk Gunakan atribut pada <Project/> elemen

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

Impor implisit ditambahkan ke bagian atas dan bawah proyek seperti yang dibahas sebelumnya.

Untuk menentukan versi SDK tertentu, tambahkan ke atribut Sdk:

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

Menggunakan elemen tingkat <Sdk/> atas

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

Impor implisit ditambahkan ke bagian atas dan bawah proyek seperti yang dibahas sebelumnya.

Atribut Version tidak diperlukan.

Menggunakan elemen di <Import/> mana saja dalam proyek Anda

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

Secara eksplisit menyertakan impor dalam proyek Anda memungkinkan Anda mengontrol penuh atas pesanan.

Saat menggunakan elemen <Import/>, Anda juga dapat menentukan atribut opsional Version. Misalnya, Anda dapat menentukan <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />.

Peringatan

Jika Anda mengubah proyek untuk menggunakan <Import/> elemen, pastikan Anda menambahkan dan .targets.props mengimpor dan menghapus SDK dari <Project/> elemen dan <Sdk/> elemen. Kegagalan untuk melakukannya akan mengakibatkan impor dua kali lipat dan MSB4011 peringatan.

Bagaimana SDK proyek diselesaikan

Saat mengevaluasi impor, MSBuild secara dinamis menyelesaikan jalur ke SDK proyek berdasarkan nama dan versi yang Anda tentukan. MSBuild juga memiliki daftar pemecah masalah SDK terdaftar, yang merupakan plug-in yang menemukan SDK proyek di komputer Anda. Plug-in ini meliputi:

  • Resolver berbasis NuGet yang meminta umpan paket yang dikonfigurasi untuk paket NuGet yang cocok dengan ID dan versi SDK yang Anda tentukan.

    Resolver ini hanya aktif jika Anda menentukan versi opsional. Ini dapat digunakan untuk SDK proyek kustom apa pun.

  • Pemecah masalah .NET SDK yang menyelesaikan SDK MSBuild yang diinstal dengan .NET SDK.

    Resolver ini menemukan SDK proyek seperti Microsoft.NET.Sdk dan Microsoft.NET.Sdk.Web yang merupakan bagian dari produk.

  • Resolver default yang menyelesaikan SDK yang diinstal dengan MSBuild.

Resolver SDK berbasis NuGet mendukung penentuan versi dalam file global.json, yang memungkinkan Anda mengontrol versi SDK proyek di satu tempat dan bukan di setiap proyek individual:

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

Hanya satu versi setiap SDK proyek yang dapat digunakan selama build. Jika Anda mereferensikan dua versi berbeda dari SDK proyek yang sama, MSBuild mengeluarkan peringatan. Disarankan untuk tidak menentukan versi dalam proyek Anda jika versi ditentukan dalam file global.json.