使用 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 專案 SDK 概觀中列出了與 .NET Core 和 .NET 5 及更高版本關聯的專案 SDK。
參考專案 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" />
。
警告
如果您將專案變更為使用 <Import/>
元素,請確定同時新增 .props
和 .targets
匯入,並且從 <Project/>
元素和 <Sdk/>
元素中移除 SDK。 若無法這麼做,將會導致雙重匯入並出現 MSB4011
警告。
解析專案 SDK 的方式
在評估匯入時,MSBuild 會根據您指定的名稱和版本,動態地解析專案 SDK 的路徑。 MSBuild 也有已註冊之 SDK 解析器的清單,這是在機器上找出專案 SDK 的外掛程式。 這些外掛程式包括:
以 NuGet 為基礎的解析程式,可查詢 NuGet 套件的設定套件摘要,以尋找符合您所指定 SDK 的識別碼和版本。
只有在您指定選擇性版本時,此解析器才會處於作用中的狀態。 它可用於任何自訂專案 SDK。
.NET SDK 解析器,可解析與 .NET SDK 一起安裝的 MSBuild SDK。
此解析器會尋找屬於產品一部分的專案 SDK,例如
Microsoft.NET.Sdk
和Microsoft.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 檔案中指定版本,建議您不要再於專案中指定版本。