Menggunakan SDK proyek MSBuild
Anda dapat mereferensikan semua infrastruktur build yang diperlukan untuk tumpukan teknologi pengembangan seperti .NET SDK hanya dengan merujuk sekumpulan properti dan target yang secara kolektif dikenal sebagai SDK proyek dengan ID spesifiknya. ID mereferensikan sekumpulan .props
file tertentu yang berisi definisi properti, dan .targets
file yang berisi definisi target. Anda mereferensikan SDK proyek dengan menggunakan Sdk
atribut pada simpul proyek tingkat atas.
<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>
Ada banyak SDK yang didistribusikan oleh Microsoft. Proyek SDK yang dirujuk dalam contoh sebelumnya memiliki moniker Microsoft.NET.Sdk
. SDK proyek yang terkait dengan .NET Core dan .NET 5 dan yang lebih baru tercantum di gambaran umum .NET Project SDK.
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>
Ketika Anda secara eksplisit menyertakan impor dalam proyek Anda, Anda memiliki kontrol 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 anda 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
danMicrosoft.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.