다음을 통해 공유


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를 참조하는 세 가지 방법이 있습니다.

<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" />을 지정할 수 있습니다.

Warning

<Import/> 요소를 사용하도록 프로젝트를 변경하는 경우 .props.targets 가져오기를 모두 추가하고 <Project/> 요소 및 <Sdk/> 요소에서 SDK를 제거해야 합니다. 이렇게 하지 않으면 가져오기가 두 번 되어 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 확인자는 개별 프로젝트 각각이 아닌 한 곳에서 프로젝트 SDK 버전을 제어할 수 있는 global.json 파일에서 버전을 지정하도록 지원합니다.

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

빌드 중에는 각 프로젝트 SDK 버전을 하나만 사용할 수 있습니다. 동일한 프로젝트 SDK의 서로 다른 두 버전을 참조하면 MSBuild에서 경고가 발생합니다. global.json 파일에 버전이 지정된 경우 프로젝트에서 버전을 지정하지 않는 것이 좋습니다.