다음을 통해 공유


작업 일괄 처리의 항목 메타데이터

MSBuild에는 항목 목록을 항목 메타데이터에 따라 다양한 범주 또는 배치로 나눈 다음, 작업을 각 배치와 함께 하나씩 실행하는 기능이 있습니다. 어떤 항목이 어떤 배치를 통해 전달될지 정확히 이해하기는 어려울 수 있습니다. 이 항목에서는 다음과 같이 일괄 처리와 관련된 일반 시나리오를 다룹니다.

  • 하나의 항목 목록을 배치로 나누기

  • 몇 개의 항목 목록을 배치로 나누기

  • 한 번에 한 항목씩 일괄 처리

  • 항목 목록 필터링

MSBuild에서의 일괄 처리에 대한 자세한 내용은 MSBuild 일괄 처리를 참조하십시오.

하나의 항목 목록을 배치로 나누기

일괄 처리를 사용하면 하나의 항목 목록을 항목 메타데이터에 따라 여러 개의 배치로 나누고 각 배치를 하나씩 작업으로 전달할 수 있습니다. 이 방법은 위성 어셈블리를 빌드하는 경우에 유용합니다.

다음 예제에서는 항목 목록을 항목 메타데이터에 따라 배치로 나누는 방법을 보여 줍니다. ExampColl 항목 목록은 Number 항목 메타데이터에 따라 세 개의 배치로 나뉩니다. Text 특성에 %(ExampColl.Number)가 있으므로 MSBuild에서는 일괄 처리가 수행되어야 함을 알 수 있습니다. ExampColl 항목 목록은 Number 메타데이터에 따라 세 개의 배치로 나뉘고 각 배치는 하나씩 작업으로 전달됩니다.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>
    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(ExampColl.Number) -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

메시지 작업 작업은 다음 정보를 표시합니다.

Number: 1 -- Items in ExampColl: Item1;Item4

Number: 2 -- Items in ExampColl: Item2;Item5

Number: 3 -- Items in ExampColl: Item3;Item6

몇 개의 항목 목록을 배치로 나누기

MSBuild에서는 여러 개의 항목 목록을 동일한 메타데이터에 따라 배치로 나눌 수 있습니다. 이렇게 하면 여러 개의 항목 목록을 배치로 분할하여 쉽게 여러 개의 어셈블리를 빌드할 수 있습니다. 예를 들어, .cs 파일로 이루어진 항목 목록을 응용 프로그램 배치와 어셈블리 배치로 나눌 수 있으며 리소스 파일로 이루어진 항목 목록을 응용 프로그램 배치와 어셈블리 배치로 나눌 수 있습니다. 그런 다음 일괄 처리를 사용하여 이러한 항목 목록을 하나의 작업으로 전달하고 응용 프로그램과 어셈블리를 모두 빌드할 수 있습니다.

참고

작업으로 전달되는 항목 목록에 참조된 메타데이터가 있는 항목이 없는 경우 해당 항목 목록의 모든 항목은 각각 배치로 전달됩니다.

다음 예제에서는 여러 항목 목록을 항목 메타데이터에 따라 배치로 나누는 방법을 보여 줍니다. ExampColl 및 ExampColl2 항목 목록은 Number 항목 메타데이터에 따라 각각 세 개의 배치로 나뉩니다. Text 특성에 %(Number)가 있으므로 MSBuild에서는 일괄 처리가 수행되어야 함을 알 수 있습니다. ExampColl 및 ExampColl2 항목 목록은 Number 메타데이터에 따라 세 개의 배치로 나뉘고 각 배치는 하나씩 작업으로 전달됩니다.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>

        <ExampColl2 Include="Item4">
            <Number>1</Number>
        </ExampColl2>
        <ExampColl2 Include="Item5">
            <Number>2</Number>
        </ExampColl2>
        <ExampColl2 Include="Item6">
            <Number>3</Number>
        </ExampColl2>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(Number) -- Items in ExampColl: @(ExampColl) ExampColl2: @(ExampColl2)"/>
    </Target>

</Project>

메시지 작업 작업은 다음 정보를 표시합니다.

Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4

Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5

Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6

한 번에 한 항목씩 일괄 처리

항목이 만들어질 때 각 항목에 할당되는 잘 알려진 항목 메타데이터에 대해서도 일괄 처리가 수행될 수 있습니다. 따라서 컬렉션의 모든 항목에는 일괄 처리에 사용할 메타데이터가 있습니다. Identity 메타데이터 값은 모든 항목에 고유하며 항목 목록의 모든 항목을 각각의 배치로 나누는 데 유용합니다. 잘 알려진 항목 메타데이터의 전체 목록은 MSBuild 잘 알려인 항목 메타데이터를 참조하십시오.

다음 예제에서는 항목 목록의 각 항목을 한 번에 하나씩 일괄 처리하는 방법을 보여 줍니다. 모든 항목의 Identity 메타데이터 값은 고유하므로 ExampColl 항목 목록은 6개의 배치로 나뉘고, 각 배치에는 항목 목록의 항목이 하나씩 포함되어 있습니다. Text 특성에 %(Identity)가 있으므로 MSBuild에서는 일괄 처리가 수행되어야 함을 알 수 있습니다.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1"/>
        <ExampColl Include="Item2"/>
        <ExampColl Include="Item3"/>
        <ExampColl Include="Item4"/>
        <ExampColl Include="Item5"/>
        <ExampColl Include="Item6"/>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Identity: &quot;%(Identity)&quot; -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

메시지 작업 작업은 다음 정보를 표시합니다.

Identity: "Item1" -- Items in ExampColl: Item1
Identity: "Item2" -- Items in ExampColl: Item2
Identity: "Item3" -- Items in ExampColl: Item3
Identity: "Item4" -- Items in ExampColl: Item4
Identity: "Item5" -- Items in ExampColl: Item5
Identity: "Item6" -- Items in ExampColl: Item6

항목 목록 필터링

항목 컬렉션을 작업으로 전달하기 전에 항목 목록의 특정 항목을 필터링하는 데 일괄 처리를 사용할 수 있습니다. 예를 들어, 잘 알려진 메타데이터인 Extension 값을 기준으로 필터링하면 특정 확장명을 가진 파일에 대해서만 작업을 수행할 수 있습니다.

다음 예제에서는 항목 목록을 항목 메타데이터에 따라 배치로 나눈 다음, 작업으로 전달할 때 해당 배치를 필터링하는 방법을 보여 줍니다. ExampColl 항목 목록은 Number 항목 메타데이터에 따라 세 개의 배치로 나뉩니다. 작업의 Condition 특성은 Number 항목 메타데이터 값이 2인 배치만 작업으로 전달되도록 지정합니다.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>

    </ItemGroup>

    <Target Name="Exec">
        <Message
            Text = "Items in ExampColl: @(ExampColl)"
            Condition="'%(Number)'=='2'"/>
    </Target>

</Project>

메시지 작업 작업은 다음 정보를 표시합니다.

Items in ExampColl: Item2;Item5

참고 항목

참조

MSBuild 잘 알려인 항목 메타데이터

Item 요소(MSBuild)

ItemMetadata 요소(MSBuild)

개념

MSBuild 일괄 처리

기타 리소스

MSBuild 개념

MSBuild 참조