共用方式為


使用 MSBuild 專案 SDK

您可以參考開發技術堆疊所需的所有建置基礎結構,例如 .NET SDK,只要參考一組以特定標識符統稱為 專案 SDK 的屬性和目標即可。 標識元會參考包含屬性定義的特定檔案集 .props ,以及 .targets 包含目標定義的檔案。 您可以在最上層專案節點上使用 Sdk 屬性來參考專案 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>

Microsoft散發了許多 SDK。 前述範例中參考的專案 SDK 具有名稱 Microsoft.NET.Sdk。 與 .NET Core 和 .NET 5 和更新版本相關聯的專案 SDK 會列在 .NET Project SDK 概觀中。

引用專案 SDK

有三種方式可以參考專案 SDK:

Sdk 元素上使用 Project 屬性

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

警告

如果您將項目變更為使用 Import 元素,請確定匯入 .props.targets,並將 SDK 從 ProjectSdk 元素中移除。 若無法這麼做,將會導致重複匯入和 MSB4011 警告。

如何解析專案 SDK

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

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

    只有在您指定選擇性版本時,此解析程式才會作用中。 它可用於任何自定義專案 SDK。

  • .NET SDK 解析程式,可解析隨 .NET SDK 一起安裝的 MSBuild SDK。

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

  • 默認解析程式,可解析隨 MSBuild 一起安裝的 SDK。

NuGet 型 SDK 解析程式支援在 global.json 檔案中指定版本,這可讓您在單一位置控制專案 SDK 版本,而不是在每個個別專案中:

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

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