Aracılığıyla paylaş


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.Sdkvardı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 gibi Microsoft.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.