如何:使用 MSBuild 專案 SDK

MSBuild 15.0 引進了「專案 SDK」的概念,可簡化使用需要匯入屬性和目標的軟體發展工具組。

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

在專案評估期間,MSBuild 會在專案檔的頂端和底部加入隱含的匯入:

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

參考專案 SDK

參考專案 SDK 的方式有三種:

  • 使用 <Project/> 元素上的 Sdk 屬性:

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

    如先前所述,會將隱含匯入新增至專案的頂端和底部。

    若要指定特定版本的 SDK,請將它附加至 Sdk 屬性:

    <Project Sdk="My.Custom.Sdk/1.2.3">
        ...
    </Project>
    
  • 使用最上層的 <Sdk/> 元素:

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

    如先前所述,會將隱含匯入新增至專案的頂端和底部。

    不需要 Version 屬性。

  • 在您專案中的任意位置使用 <Import/> 元素:

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

    在您的專案中明確包含匯入可讓您完全控制順序。

    當使用 <Import/> 元素時,您也可以指定選擇性的 Version 屬性。 例如,您可以指定 <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />

解析專案 SDK 的方式

評估匯入時,MSBuild 會根據您指定的名稱和版本,動態地解析專案 SDK 的路徑。 MSBuild 也會列出已註冊的 SDK 解析程式,這些解析程式是在您的電腦上尋找專案 sdk 的外掛程式。 這些外掛程式包括:

  • 以 NuGet 為基礎的解析程式,可查詢 NuGet 套件的設定套件摘要,以尋找符合您所指定 SDK 的識別碼和版本。

    只有在您指定了選用的版本時,此解析程式才有效。 它可用於任何自訂專案 SDK。

  • 解決隨.net sdk安裝 MSBuild sdk 的 .net SDK 解析程式。

    此解析程式會尋找屬於產品一部分的專案 Sdk,例如 Microsoft.NET.SdkMicrosoft.NET.Sdk.Web

  • 預設的解析程式,可解析使用 MSBuild 安裝的 SDK。

以 NuGet 為基礎的 SDK 解析程式支援在global.asax檔案中指定版本,可讓您在單一位置(而不是在每個個別專案中)控制專案 SDK 版本:

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

在建置期間每個專案 SDK 都只能使用一個版本。 如果您參考相同專案 SDK 的兩個不同版本,MSBuild 會發出警告。 如果在 global. json 檔案中指定了版本,建議您 不要 在專案中指定版本。

另請參閱