您可以參考開發技術堆疊所需的所有建置基礎結構,例如 .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 從 Project
和 Sdk
元素中移除。 若無法這麼做,將會導致重複匯入和 MSB4011
警告。
如何解析專案 SDK
評估匯入時,MSBuild 會根據您指定的名稱和版本,動態解析專案 SDK 的路徑。 MSBuild 也有已註冊的 SDK 解析程式清單,這些解析程式是在您的電腦上尋找專案 SDK 的外掛程式。 這些外掛程式包括:
以 NuGet 為基礎的解析程式,會針對符合您指定之 SDK 識別碼和版本的 NuGet 套件,查詢您設定的套件摘要。
只有在您指定選擇性版本時,此解析程式才會作用中。 它可用於任何自定義專案 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 檔案中指定版本,建議您不要在專案中指定版本。