MSBuild proje SDK'larını kullanma

MSBuild 15.0, özelliklerin ve hedeflerin içeri aktarılmasını gerektiren yazılım geliştirme setlerinin kullanılmasını kolaylaştıran "proje SDK'sı" kavramını kullanıma sunulmuştur.

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

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>

Projenizdeki içeri aktarmaları açıkça dahil etmek, sipariş üzerinde tam denetim sahibi olmanıza olanak tanır.

öğ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ı

Projeyi öğeleri kullanacak şekilde <Import/> değiştiriyorsanız, 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 belirtmemeniz önerilir.