대상 빌드 순서
단일 대상에 대한 입력이 다른 대상의 출력을 사용하는 경우에는 대상의 순서를 지정해야 합니다. 다음과 같은 특성을 사용하여 대상이 실행되는 순서를 지정할 수 있습니다.
InitialTargets
. 이Project
특성은 대상이 명령줄 또는DefaultTargets
특성에 지정되어 있더라도 처음으로 실행할 대상을 지정합니다.DefaultTargets
. 이Project
속성은 명령줄에 타깃을 명시적으로 지정하지 않은 경우 실행할 타깃을 지정합니다.DependsOnTargets
. 이Target
특성은 이 대상을 실행하려면 먼저 실행해야 하는 대상을 지정합니다.BeforeTargets
및AfterTargets
. 이러한Target
특성은 지정된 대상 전이나 후에 이 대상을 실행해야 하도록 지정합니다.
일반적으로 선언 목록 순서에 따라 다른 작업 전에 실행되는 작업을 지정해서는 안 됩니다.
대상은 빌드의 후속 대상이 종속되더라도 빌드 중에 두 번 실행되지 않습니다. 대상이 실행되고 나면 빌드 내에서 해당 대상의 역할은 완료됩니다.
대상은 Condition
속성을 가질 수 있습니다. 지정된 조건이 false
로 평가되면 대상은 실행되지 않으며 빌드에 영향을 주지 않습니다. 조건에 대한 자세한 내용은 조건을 참조하세요.
초기 대상
Project 요소의 InitialTargets
특성은 대상이 명령줄 또는 DefaultTargets
특성에 지정되어 있더라도 처음으로 실행할 대상을 지정합니다. 초기 대상은 대개 오류 검사용으로 사용됩니다.
InitialTargets
특성의 값은 세미콜론으로 구분되어 순서가 지정된 대상 목록일 수 있습니다. 다음 예제에서는 Warm
대상이 실행된 후에 Eject
대상이 실행됨을 지정합니다.
<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
가져온 프로젝트는 자체 InitialTargets
속성을 가질 수 있습니다. 모든 초기 대상은 함께 집계되어 순서대로 실행됩니다.
자세한 내용은 방법: 먼저 빌드할 대상 지정을 참조하세요.
기본 대상
Project 요소의 DefaultTargets
특성은 대상이 명령줄에 명시적으로 지정되어 있지 않은 경우 빌드할 하나 이상의 대상을 지정합니다.
DefaultTargets
특성의 값은 세미콜론으로 구분되어 순서가 지정된 기본 대상 목록일 수 있습니다. 다음 예제에서는 Clean
대상이 실행된 후에 Build
대상이 실행됨을 지정합니다.
<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
명령줄에서 -target 스위치를 사용하여 기본 대상을 재정의할 수 있습니다. 다음 예제에서는 Build
대상이 실행된 후에 Report
대상이 실행됨을 지정합니다. 이 방식으로 대상을 지정하면 기본 대상은 무시됩니다.
msbuild -target:Build;Report
초기 대상과 기본 대상을 모두 지정하고 명령줄 대상은 지정하지 않는 경우 MSBuild는 초기 대상을 먼저 실행한 후에 기본 대상을 실행합니다.
가져온 프로젝트는 자체 DefaultTargets
속성을 가질 수 있습니다. 처음으로 나오는 DefaultTargets
특성에 따라 실행될 기본 대상이 결정됩니다.
자세한 내용은 방법: 먼저 빌드할 대상 지정을 참조하세요.
첫 번째 대상
초기 대상, 기본 대상 또는 명령줄 대상이 없으면 MSBuild는 프로젝트 파일이나 가져온 프로젝트 파일에서 처음으로 나오는 대상을 실행합니다.
대상 종속성
대상은 상호 간의 종속 관계를 설명할 수 있습니다. DependsOnTargets
특성은 대상이 다른 대상에 종속됨을 나타냅니다. 예를 들면 다음과 같습니다.
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
위의 코드는 Serve
대상이 Chop
대상과 Cook
대상에 종속됨을 지시합니다. MSBuild는 Chop
대상, Cook
대상, Serve
대상을 순서대로 실행합니다.
참고 항목
SDK의 표준 대상은 해당 대상의 종속성인 대상 목록(예 $(BuildDependsOn)
, $(CleanDependsOn)
등)을 포함하는 여러 DependsOn
속성을 정의합니다. 예를 들면 다음과 같습니다.
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
프로젝트를 사용자 지정하려면 Visual Studio 빌드 프로세스 확장에 설명된 대로 빌드 프로세스를 확장하는 추가 사용자 지정 대상으로 DependsOn
속성을 재정의할 수 있습니다.
BeforeTargets 및 AfterTargets
BeforeTargets
및 AfterTargets
특성을 사용하여 대상 순서를 지정할 수 있습니다.
다음 스크립트를 살펴보세요.
<Project DefaultTargets="Compile;Link" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Compile">
<Message Text="Compiling" />
</Target>
<Target Name="Link">
<Message Text="Linking" />
</Target>
</Project>
Compile
대상이 실행된 이후 Link
대상이 실행되기 전에 실행되는 중간 대상 Optimize
를 만들려면 Project
요소의 아무 위치에나 다음 대상을 추가합니다.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
또는 순서를 다음과 같이 지정합니다
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
동일한 대상에 BeforeTargets
와(과) AfterTargets
을(를) 모두 지정하는 것은 유용하지 않습니다. 다음 섹션에서 설명한 대로 발견된 첫 번째 대상에서만 새 대상이 실행됩니다.
대상 빌드 순서 결정
MSBuild는 다음처럼 대상 빌드 순서를 결정합니다.
InitialTargets
대상이 실행됩니다.-target 스위치를 통해 명령줄에 지정된 대상이 실행됩니다. 명령줄에서 대상을 지정하지 않으면
DefaultTargets
대상이 실행됩니다. 이 두 대상이 모두 없으면 처음으로 나오는 대상이 실행됩니다.대상의
Condition
특성을 평가합니다.Condition
특성이 있고false
로 평가되는 경우 대상은 실행되지 않으며 빌드에 영향을 주지 않습니다.BeforeTargets
또는AfterTargets
에 조건부 대상을 나열하는 다른 대상은 여전히 지정된 순서대로 실행됩니다.대상이 실행되거나 건너뛰기 전에
Condition
특성이 대상에 적용되고false
(으)로 평가되지 않는 한 해당DependsOnTargets
대상이 실행됩니다.참고 항목
출력 항목이 최신이기 때문에 실행되지 않은 대상은 건너뛴 것으로 간주됩니다( 증분 빌드참조). 이 검사는 대상 내부의 작업을 실행하기 직전에 수행되며 대상의 실행 순서에는 영향을 미치지 않습니다.
대상을 실행하거나 건너뛰기 전에
BeforeTargets
특성에 대상을 나열하는 다른 대상이 실행됩니다.대상이 실행되기 전에
Inputs
특성과Outputs
특성을 비교합니다. MSBuild는 해당하는 하나 이상의 입력 파일과 관련하여 출력 파일이 오래된 것으로 확인되면 대상을 실행합니다. 그렇지 않으면 MSBuild는 대상을 건너뜁니다.대상을 실행하거나 건너뛴 후에는
AfterTargets
특성에 나열하는 다른 대상이 실행됩니다.