다음을 통해 공유


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

요소의 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 가져오고 요소와 요소 Project 에서 SDK를 Sdk 제거해야 합니다. 이렇게 하지 않으면 이중 가져오기 및 경고가 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 파일에서 버전 지정을 지원하므로 각 개별 프로젝트가 아닌 한 곳에서 프로젝트 SDK 버전을 제어할 수 있습니다.

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

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