次の方法で共有


MSBuild プロジェクト SDK を使用する

.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.SdkMicrosoft.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 ファイルでバージョンが指定されている場合は、プロジェクトでバージョンを指定しないことをお勧めします。