.NET SDK などの開発テクノロジ スタックに必要なすべてのビルド インフラストラクチャを参照するには、特定の ID で一連のプロパティとターゲットをまとめて プロジェクト SDK と呼びます。 ID は、プロパティ定義を含む特定の .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 を参照するには、次の 3 つの方法があります。
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" />
を指定できます。
Warnung
Import
要素を使用するようにプロジェクトを変更する場合は、.props
インポートと.targets
インポートの両方を追加し、Project
要素とSdk
要素から SDK を削除してください。 これを行わないと、インポートが duplicaate になり、 MSB4011
警告が発生します。
プロジェクト SDK の解決方法
インポートを評価すると、MSBuild は、指定した名前とバージョンに基づいて、プロジェクト SDK へのパスを動的に解決します。 MSBuild には、登録されている SDK リゾルバーの一覧もあります。これは、コンピューター上のプロジェクト SDK を検索するプラグインです。 これらのプラグインには、次のものが含まれます。
指定した SDK の ID とバージョンに一致する NuGet パッケージの構成済みパッケージ フィードを照会する NuGet ベースのリゾルバー。
このリゾルバーは、オプションのバージョンを指定した場合にのみアクティブになります。 任意のカスタム プロジェクト SDK に使用できます。
.NET SDK と共にインストールされている MSBuild SDK を解決する .NET SDK リゾルバー。
このリゾルバーは、製品の一部である
Microsoft.NET.Sdk
やMicrosoft.NET.Sdk.Web
などのプロジェクト SDK を検索します。MSBuild と共にインストールされた SDK を解決する既定のリゾルバー。
NuGet ベースの SDK リゾルバーでは、 global.json ファイルでバージョンを指定できます。これにより、個々のプロジェクトではなく、1 か所でプロジェクト SDK のバージョンを制御できます。
{
"msbuild-sdks": {
"My.Custom.Sdk": "5.0.0",
"My.Other.Sdk": "1.0.0-beta"
}
}
ビルド中に使用できるプロジェクト SDK のバージョンは 1 つだけです。 同じプロジェクト SDK の 2 つの異なるバージョンを参照すると、MSBuild によって警告が生成されます。 global.json ファイルでバージョンが指定されている場合は、プロジェクトでバージョンを指定しないことをお勧めします。