MSBuild proje SDK'larını kullanma
.NET SDK'sı gibi bir geliştirme teknolojisi yığını için gereken tüm derleme altyapısına başvurmak için yalnızca belirli kimliğine göre proje SDK'sı olarak bilinen bir özellik ve hedef kümesine başvurabilirsiniz. Kimlik, özellik tanımları içeren belirli bir dosya kümesine .props
ve .targets
hedef tanımları içeren dosyalara başvurur. Üst düzey proje düğümündeki özniteliğini Sdk
kullanarak bir proje SDK'sine başvurursunuz.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Projenin değerlendirmesi sırasında MSBuild, proje dosyasının üstüne ve altına örtük içeri aktarmalar ekler:
<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>
Microsoft tarafından dağıtılan birçok SDK vardır. Önceki örnekte başvuruda bulunan proje SDK'sının adı Microsoft.NET.Sdk
vardır. .NET Core ve .NET 5 ve üzeri ile ilişkilendirilmiş proje SDK'ları .NET Proje SDK'sı genel bakış sayfasında listelenir.
Proje SDK'sı başvurusu
Proje SDK'sına başvurmanın üç yolu vardır:
öğesinde Sdk
özniteliğini <Project/>
kullanma
<Project Sdk="My.Custom.Sdk">
...
</Project>
Daha önce açıklandığı gibi projenin üstüne ve altına örtük bir içeri aktarma eklenir.
SDK'nın belirli bir sürümünü belirtmek için özniteliğine Sdk
ekleyin:
<Project Sdk="My.Custom.Sdk/1.2.3">
...
</Project>
Üst düzey <Sdk/>
öğeyi kullanma
<Project>
<Sdk Name="My.Custom.Sdk" Version="1.2.3" />
...
</Project>
Daha önce açıklandığı gibi projenin üstüne ve altına örtük bir içeri aktarma eklenir.
Version
Özniteliği gerekli değildir.
<Import/>
öğesini projenizin herhangi bir yerinde kullanma
<Project>
<PropertyGroup>
<MyProperty>Value</MyProperty>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
...
<Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>
İçeri aktarmaları projenize açıkça eklediğinizde, sıra üzerinde tam denetime sahipsinizdir.
öğesini kullanırken <Import/>
isteğe bağlı Version
bir öznitelik de belirtebilirsiniz. Örneğin, belirtebilirsiniz <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />
.
Uyarı
Projenizi öğeleri kullanacak şekilde <Import/>
değiştirirseniz, hem hem .targets
de .props
içeri aktarmaları eklediğinizden ve SDK'yı öğeden ve <Sdk/>
öğelerden kaldırdığınızdan <Project/>
emin olun. Bunun yapılmaması, iki kez içeri aktarma ve uyarıyla MSB4011
sonuçlanır.
Proje SDK'ları nasıl çözümlenir?
İçeri aktarmayı değerlendirirken MSBuild, proje SDK'sının yolunu belirttiğiniz ada ve sürüme göre dinamik olarak çözümler. MSBuild ayrıca makinenizdeki proje SDK'larını bulan eklentiler olan kayıtlı SDK çözümleyicilerinin bir listesine sahiptir. Bu eklentiler şunlardır:
Belirttiğiniz SDK'nın kimliği ve sürümüyle eşleşen NuGet paketleri için yapılandırılmış paket akışlarınızı sorgulayan NuGet tabanlı bir çözümleyici.
Bu çözümleyici yalnızca isteğe bağlı bir sürüm belirttiyseniz etkindir. Herhangi bir özel proje SDK'sı için kullanılabilir.
.NET SDK ile yüklenen MSBuild SDK'larını çözümleyen bir .NET SDK çözümleyicisi.
Bu çözümleyici, ürünün parçası olan ve
Microsoft.NET.Sdk.Web
gibiMicrosoft.NET.Sdk
proje SDK'larını bulur.MSBuild ile yüklenen SDK'ları çözümleyen varsayılan çözümleyici.
NuGet tabanlı SDK çözümleyicisi, global.json dosyasında bir sürüm belirtmeyi destekler ve bu da proje SDK'sı sürümünü her bir proje yerine tek bir yerde denetlemenize olanak tanır:
{
"msbuild-sdks": {
"My.Custom.Sdk": "5.0.0",
"My.Other.Sdk": "1.0.0-beta"
}
}
Derleme sırasında her proje SDK'sının yalnızca bir sürümü kullanılabilir. Aynı proje SDK'sının iki farklı sürümüne başvurursanız, MSBuild bir uyarı yayar. global.json dosyasında bir sürüm belirtilmişse projelerinizde bir sürüm belirtmemenizi öneririz.