다음을 통해 공유


대상 빌드 순서

한 대상에 대한 입력이 다른 대상 출력에 따라 다른 경우 대상의 순서를 지정해야 합니다. 다음과 같은 여러 가지 방법으로 대상 실행 순서를 지정할 수 있습니다.

  • 초기 대상

  • 기본 대상

  • 첫 번째 대상

  • 대상 종속성

  • BeforeTargets 및 AfterTargets(MSBuild 4.0)

대상은 빌드 내의 후속 대상이 해당 대상에 종속되는 경우에도 빌드 과정에서 두 번 이상 실행되지 않습니다. 대상이 실행되면 더 이상 빌드에 영향을 주지 않습니다.

대상에 Condition 특성이 포함될 수 있습니다. 지정한 조건이 false로 확인되면 대상이 실행되지 않고 빌드에 영향을 주지 않습니다. 조건에 대한 자세한 내용은 MSBuild 조건을 참조하십시오.

초기 대상

Project 요소에는 값이 세미콜론으로 구분되는 사전순 대상 목록이 될 수 있는 선택적 InitialTargets 특성이 있습니다. 다음 예제를 참조하십시오.

<Project InitialTargets="Warm;Eject" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

위 코드는 Warm 대상이 실행된 후 Eject 대상이 실행되도록 지정합니다.

가져온 프로젝트에는 자체 InitialTargets 특성이 포함될 수 있습니다. 모든 초기 대상이 함께 집계되고 순서대로 실행됩니다. 초기 대상은 일반적으로 오류 검사에 사용됩니다.

초기 대상은 명령줄을 사용하여 재정의할 수 있습니다. 다음 예제를 참조하십시오.

msbuild /target:Build;Report

위 코드는 Build 대상이 실행된 후 Report 대상이 실행되도록 지정합니다. 대상이 이러한 방식으로 지정되면 초기 대상이 무시됩니다.

자세한 내용은 방법: 먼저 빌드할 대상 지정을 참조하십시오.

기본 대상

Project 요소에도 값이 세미콜론으로 구분되는 사전순 기본 대상 목록이 될 수 있는 선택적 DefaultTargets 특성이 있습니다. 다음 예제를 참조하십시오.

<Project DefaultTargets="Clean;Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

위 코드는 Clean 대상이 실행된 후 Build 대상이 실행되도록 지정합니다.

가져온 프로젝트에는 자체 DefaultTargets 특성이 포함될 수 있습니다. 발견된 첫 번째 DefaultTargets 특성은 실행할 기본 대상을 지정합니다.

기본 대상은 명령줄을 사용하여 재정의할 수 있습니다. 다음 예제를 참조하십시오.

msbuild /target:Build;Report

위 코드는 Build 대상이 실행된 후 Report 대상이 실행되도록 지정합니다. 대상이 이러한 방식으로 지정되면 기본 대상이 무시됩니다.

초기 대상과 기본 대상이 모두 지정되고 명령줄 대상이 지정되지 않은 경우 MSBuild에서는 먼저 초기 대상을 실행한 후 기본 대상을 실행합니다.

첫 번째 대상

초기 대상, 기본 대상 또는 명령줄 대상이 없는 경우 MSBuild에서는 프로젝트 파일 또는 가져온 프로젝트 파일에서 처음 발견한 대상을 실행합니다.

대상 종속성

대상은 서로 간의 종속성 관계를 설명할 수 있습니다. DependsOnTargets 특성은 대상이 다른 대상에 종속됨을 나타냅니다. 다음 예제를 참조하십시오.

<Target Name="Serve" DependsOnTargets="Chop;Cook" />

위 코드는 MSBuild에게 Serve 대상이 Chop 대상 및 Cook 대상에 종속됨을 알립니다. MSBuild에서는 Serve 대상을 실행하기 전에 Chop 대상과 Cook 대상을 차례로 실행합니다.

BeforeTargets 및 AfterTargets

MSBuild 4.0에서는 BeforeTargets 및 AfterTargets 특성을 사용하여 대상 순서를 지정할 수 있습니다.

다음 스크립트를 살펴보십시오.

<Project DefaultTargets="Compile;Link" xmlns="https://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" BeforeTargets="Link">
        <Message Text="Optimizing" />
    </Target>

대상 빌드 순서 지정

MSBuild에서는 다음과 같이 대상 빌드 순서를 지정합니다.

  1. /target 스위치에 의해 명령줄에 지정된 대상이 실행됩니다. 대상을 지정하지 않은 경우 InitialTargets 대상이 실행된 다음 DefaultTargets 대상이 실행됩니다. 이 두 대상 중 아무것도 없는 경우 처음 발견된 대상이 실행됩니다.

  2. 대상의 Condition 특성이 계산됩니다. Condition 특성이 있고 false로 계산되는 경우 대상이 실행되지 않으며 빌드에 더 이상 영향을 주지 않습니다.

  3. 대상을 실행하기 전에 해당 DependsOnTargets 대상이 실행됩니다.

  4. 대상을 실행하기 전에 BeforeTargets 특성에 대상을 나열하는 대상이 실행됩니다.

  5. 대상을 실행하기 전에 해당 Inputs 특성과 Outputs 특성이 비교됩니다. MSBuild에서 출력 파일이 해당 입력 파일보다 이전 버전임을 확인하면 대상을 실행합니다. 그렇지 않으면 대상을 건너뜁니다.

  6. 대상을 실행하거나 건너뛰고 나면 AfterTargets 특성에 대상을 나열하는 대상이 실행됩니다.

참고 항목

개념

MSBuild 대상