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.Sdk
및Microsoft.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 파일에 버전이 지정된 경우 프로젝트에서 버전을 지정하지 않는 것이 좋습니다.