Target 요소(MSBuild)

MSBuild가 순차적으로 실행할 작업 집합을 포함합니다.

<Project><Target>

구문

<Target Name="Target Name"
        Inputs="Inputs"
        Outputs="Outputs"
        Returns="Returns"
        KeepDuplicateOutputs="true/false"
        BeforeTargets="Targets"
        AfterTargets="Targets"
        DependsOnTargets="DependentTarget"
        Condition="'String A' == 'String B'"
        Label="Label">
    <Task>... </Task>
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <OnError... />
</Target>

특성 및 요소

다음 단원에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.

특성

특성 설명
Name 필수 특성입니다.

대상의 이름입니다. 대상 이름은 $@()%*?.를 제외한 모든 문자를 포함할 수 있습니다.
Condition 선택적 특성입니다.

평가할 조건입니다. 조건이 false로 평가되면 해당 대상 또는 DependsOnTargets 특성에 설정되어 있는 대상의 본문이 실행되지 않습니다. 조건에 대한 자세한 내용은 조건을 참조하세요.
Inputs 선택적 특성입니다.

이 대상에 대한 입력을 구성하는 파일입니다. 파일이 여러 개인 경우 세미콜론으로 구분합니다. 파일의 타임스탬프를 Outputs에 있는 파일의 타임스탬프와 비교하여 Target이 최신 상태인지를 확인합니다. 자세한 내용은 증분 빌드, 방법: 증분 빌드변환을 참조하세요.
Outputs 선택적 특성입니다.

이 대상에 대한 출력을 구성하는 파일입니다. 파일이 여러 개인 경우 세미콜론으로 구분합니다. 파일의 타임스탬프를 Inputs에 있는 파일의 타임스탬프와 비교하여 Target이 최신 상태인지를 확인합니다. 자세한 내용은 증분 빌드, 방법: 증분 빌드변환을 참조하세요.
Returns 선택적 특성입니다.

이 대상을 호출하는 작업(예: MSBuild 작업)에 대해 제공할 항목 집합입니다. 대상이 여러 개인 경우 세미콜론으로 구분합니다. 파일의 대상에 Returns 특성이 없으면 Outputs 특성이 이 용도로 대신 사용됩니다.
KeepDuplicateOutputs 선택적 부울 특성입니다.

true인 경우 대상의 Returns에서 같은 항목에 대한 여러 참조가 기록됩니다. 기본적으로 이 특성은 false입니다.
BeforeTargets 선택적 특성입니다.

대상 이름의 세미콜론으로 구분된 목록입니다. 지정하는 경우 하나 이상의 지정된 대상을 실행하기 전에 이 대상을 실행해야 함을 나타납니다. 이렇게 하면 프로젝트 작성자가 기존 대상 집합을 직접 수정하지 않고 확장할 수 있습니다. 자세한 내용은 대상 빌드 순서를 참조하세요.
AfterTargets 선택적 특성입니다.

대상 이름의 세미콜론으로 구분된 목록입니다. 지정하는 경우 하나 이상의 지정된 대상을 실행한 후에 이 대상을 실행해야 함을 나타납니다. 이렇게 하면 프로젝트 작성자가 기존 대상 집합을 직접 수정하지 않고 확장할 수 있습니다. 자세한 내용은 대상 빌드 순서를 참조하세요.
DependsOnTargets 선택적 특성입니다.

이 대상을 실행하거나 최상위 종속성 분석을 수행하려면 실행해야 하는 대상입니다. 대상이 여러 개인 경우 세미콜론으로 구분합니다.
Label 선택적 특성입니다.

시스템 및 사용자 요소를 식별하거나 정렬할 수 있는 식별자입니다.

자식 요소

요소 설명
Task MSBuild 작업의 인스턴스를 만들고 실행합니다. 대상에는 작업이 없을 수도 있고 하나 이상 있을 수도 있습니다.
PropertyGroup 사용자 정의 Property 요소 집합을 포함합니다. .NET Framework 3.5부터는 Target 요소가 PropertyGroup 요소를 포함할 수 있습니다.
ItemGroup 사용자 정의 Item 요소 집합을 포함합니다. .NET Framework 3.5부터는 Target 요소가 ItemGroup 요소를 포함할 수 있습니다. 자세한 내용은 항목을 참조하세요.
OnError 실패한 작업의 ContinueOnError 특성이 ErrorAndStop 또는 false인 경우 하나 이상의 대상이 실행되도록 합니다. 대상에는 OnError 요소가 없을 수도 있고 하나 이상 있을 수도 있습니다. OnError 요소는 있는 경우 Target 요소의 마지막 요소여야 합니다.

ContinueOnError 특성에 대한 자세한 내용은 Task 요소(MSBuild)를 참조하세요.

부모 요소

요소 Description
프로젝트 MSBuild 프로젝트 파일의 필수 루트 요소입니다.

설명

실행할 첫 번째 대상은 런타임에 지정됩니다. 대상은 다른 대상에 대한 종속성을 포함할 수 있습니다. 예를 들어 배포용 대상은 컴파일용 대상에 종속됩니다. MSBuild 엔진은 종속성을 DependsOnTargets 특성에 나타나는 순서대로 왼쪽에서 오른쪽으로 실행합니다. 자세한 내용은 대상을 참조하세요.

MSBuild는 가져오기 순서에 종속되며, 특정 Name 특성을 가진 대상의 마지막 정의가 사용됩니다.

둘 이상의 대상이 종속성을 포함하고 있더라도 대상은 빌드 중에 한 번만 실행됩니다.

Condition 특성이 false로 평가되어 대상을 건너뛰더라도 빌드의 뒷부분에서 해당 대상을 호출하는 시점에 Condition 특성이 true로 평가되면 대상을 실행할 수 있습니다.

MSBuild 4 이전 버전에서 TargetOutputs 특성에 지정된 모든 항목을 반환했습니다. 이를 위해 MSBuild는 빌드 뒷부분의 작업이 요청할 때를 대비하여 이러한 항목을 기록해야 했습니다. 호출자에게 필요한 출력을 포함하는 대상을 나타낼 방법이 없었으므로 MSBuild는 호출된 모든 Target에서 모든 Outputs의 항목을 모두 누적 기록했습니다. 이로 인해 출력 항목 수가 많은 빌드의 경우 확장 문제가 발생했습니다.

사용자가 프로젝트의 Target 요소에 대해 Returns를 지정하는 경우 Returns 특성이 포함된 Target만 해당 항목을 기록합니다.

TargetOutputs 특성 및 Returns 특성을 모두 포함할 수 있습니다. OutputsInputs과 함께 사용되어 대상이 최신 상태인지를 확인합니다. Returns(있는 경우)는 Outputs의 값을 재정의하여 호출자에게 반환되는 항목을 결정합니다. Returns가 없으면 앞에서 설명하는 경우를 제외하고 Outputs가 호출자에게 제공됩니다.

MSBuild 4 이전 버전에서는 TargetOutputs의 같은 항목에 대한 여러 참조가 포함되어 있는 경우 항상 중복 항목이 기록되었습니다. 중복 항목은 전혀 사용되지 않으므로 출력 수와 프로젝트 상호 종속성이 많은 대형 빌드에서는 이러한 방식으로 인해 많은 양의 메모리가 낭비됩니다. KeepDuplicateOutputs 특성을 true로 설정하면 이러한 중복 항목이 기록됩니다.

예시

다음 코드 예제는 Csc 작업을 실행하는 Target 요소를 보여 줍니다.

<Target Name="Compile" DependsOnTargets="Resources" Returns="$(TargetPath)">
    <Csc Sources="@(CSFile)"
          TargetType="library"
          Resources="@(CompiledResources)"
          EmitDebugInformation="$(includeDebugInformation)"
          References="@(Reference)"
          DebugType="$(debuggingType)" >
        <Output TaskParameter="OutputAssembly"
                  ItemName="FinalAssemblyName" />
    </Csc>
</Target>

참고 항목