MSBuild 대상MSBuild Targets

대상은 특정 순서로 작업을 그룹화하며 빌드 프로세스를 더 작은 단위로 팩터링될 수 있도록 합니다.Targets group tasks together in a particular order and allow the build process to be factored into smaller units. 예를 들어 하나의 대상이 빌드에 대한 준비를 위해 출력 디렉터리에서 모든 파일을 삭제할 수 있는 반면 다른 대상은 프로젝트에 대한 입력을 컴파일하고 빈 디렉터리에 배치합니다.For example, one target may delete all files in the output directory to prepare for the build, while another compiles the inputs for the project and places them in the empty directory. 작업에 대한 자세한 내용은 작업을 참조하세요.For more information on tasks, see Tasks.

프로젝트 파일에서 대상 선언Declaring Targets in the Project File

Target 요소로 프로젝트 파일에 대상을 선언합니다.Targets are declared in a project file with the Target element. 예를 들어 다음 XML은 Construct라는 대상을 만든 다음 컴파일 항목 형식으로 Csc 작업을 호출합니다.For example, the following XML creates a target named Construct, which then calls the Csc task with the Compile item type.

<Target Name="Construct">  
    <Csc Sources="@(Compile)" />  
</Target>  

MSBuild 속성처럼 대상은 다시 정의될 수 있습니다.Like MSBuild properties, targets can be redefined. 예를 들면 다음과 같습니다.For example,

<Target Name="AfterBuild" >  
    <Message Text="First occurrence" />  
</Target>  
<Target Name="AfterBuild" >  
    <Message Text="Second occurrence" />  
</Target>  

AfterBuild가 실행되는 경우 "두 번째 발생"만 표시됩니다.If AfterBuild executes, it displays only "Second occurrence".

대상 빌드 순서Target Build Order

단일 대상에 대한 입력이 다른 대상의 출력을 사용하는 경우에는 대상의 순서를 지정해야 합니다.Targets must be ordered if the input to one target depends on the output of another target. 대상 실행의 순서를 지정하는 방법은 여러 가지가 있습니다.There are several ways to specify the order in which targets run.

  • 초기 대상Initial targets

  • 기본 대상Default targets

  • 첫 번째 대상First target

  • 대상 종속성Target dependencies

  • BeforeTargetsAfterTargets(MSBuild 4.0)BeforeTargets and AfterTargets (MSBuild 4.0)

    대상은 빌드의 후속 대상이 종속되더라도 단일 빌드 중에 두 번 실행되지 않습니다.A target never runs twice during a single build, even if a subsequent target in the build depends on it. 대상이 실행되면 빌드 내에서 해당 대상의 역할은 완료됩니다.Once a target runs, its contribution to the build is complete.

    대상 빌드 순서에 대한 세부 내용 및 자세한 내용은 대상 빌드 순서를 참조하세요.For details and more information about the target build order, see Target Build Order.

대상 일괄 처리Target Batching

대상 요소에는 %(메타데이터) 형식에서 메타데이터를 지정하는 Outputs 특성이 있을 수 있습니다.A target element may have an Outputs attribute which specifies metadata in the form %(Metadata). 이 경우 MSBuild는 해당 메타데이터 값을 가진 항목을 그룹화 또는 "일괄 처리"하여 각 고유 메타데이터 값에 대해 한 번씩 대상을 실행합니다.If so, MSBuild runs the target once for each unique metadata value, grouping or "batching" the items that have that metadata value. 예를 들면 다음과 같습니다.For example,

<ItemGroup>  
    <Reference Include="System.Core">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="System.Xml.Linq">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="Microsoft.CSharp">  
      <RequiredTargetFramework>4.0</RequiredTargetFramework>  
    </Reference>  
</ItemGroup>  
<Target Name="AfterBuild"  
    Outputs="%(Reference.RequiredTargetFramework)">  
    <Message Text="Reference:  
      @(Reference->'%(RequiredTargetFramework)')" />  
</Target>  

RequiredTargetFramework 메타데이터로 참조 항목을 일괄 처리합니다.batches the Reference items by their RequiredTargetFramework metadata. 대상의 출력은 다음과 같습니다.The output of the target looks like this:

Reference: 3.5;3.5  
Reference: 4.0  

대상 일괄 처리는 실제 빌드에 거의 사용되지 않습니다.Target batching is seldom used in real builds. 작업 일괄 처리가 더 일반적입니다.Task batching is more common. 자세한 내용은 일괄 처리를 참조하세요.For more information, see Batching.

증분 빌드Incremental Builds

증분 빌드는 해당 입력 파일과 관련하여 최신 상태인 출력 파일이 있는 대상이 실행되지 않도록 최적화된 빌드입니다.Incremental builds are builds that are optimized so that targets with output files that are up-to-date with respect to their corresponding input files are not executed. 대상 요소는 대상이 입력으로 예상하는 항목 및 출력으로 생성하는 항목을 나타내는 InputsOutputs 특성을 모두 가질 수 있습니다.A target element can have both Inputs and Outputs attributes, indicating what items the target expects as input, and what items it produces as output.

모든 출력 항목이 최신 상태인 경우 MSBuild는 대상을 건너뜁니다. 이로 인해 빌드 속도가 크게 향상됩니다.If all output items are up-to-date, MSBuild skips the target, which significantly improves the build speed. 이를 대상의 증분 빌드라고 합니다.This is called an incremental build of the target. 일부 파일만 최신 상태인 경우 MSBuild는 최신 항목 없이 대상을 실행합니다.If only some files are up-to-date, MSBuild executes the target without the up-to-date items. 이를 대상의 부분 증분 빌드라고 합니다.This is called a partial incremental build of the target. 자세한 내용은 증분 빌드를 참조하세요.For more information, see Incremental Builds.

참고 항목See Also

MSBuild 개념 MSBuild Concepts
방법: 여러 프로젝트 파일에서 동일한 대상 사용How to: Use the Same Target in Multiple Project Files