항목 및 속성 조작에 사용할 수 있는 새 메서드(MSBuild)

업데이트: 2007년 11월

MSBuild 3.5부터는 다음과 같은 작업을 수행할 수 있습니다.

  • 프로젝트의 모든 항목에 적용되는 메타데이터를 포함하는 항목 정의 그룹을 정의할 수 있습니다.

  • 항목 그룹에서 직접 속성, 항목 및 항목 메타데이터를 동적으로 생성, 삭제, 결합 또는 변경할 수 있습니다. CreateItem 및 CreateProperty 작업을 사용하는 대신 이 작업을 수행할 수 있습니다.

항목 정의 그룹

ItemDefinitionGroup 요소를 사용하면 기본적으로 프로젝트의 모든 항목에 적용되는 메타데이터 값인 항목 정의 집합을 정의할 수 있습니다. 자세한 내용은 항목 정의를 참조하십시오.

항목 그룹의 메타데이터를 동적으로 조정

MSBuild에서는 ItemGroup 요소(MSBuild)PropertyGroup 요소(MSBuild)를 사용하여 항목과 속성을 정적으로 선언합니다. MSBuild 2.0에서는 빌드하는 동안 속성과 항목을 만들거나 수정하려면 CreateItem 작업 또는 CreateProperty 작업을 사용해야 했습니다. 이 과정은 어렵고 동적 업데이트를 효과적으로 지원하지 않습니다. 그러나 MSBuild 3.5에서는 항목 그룹에서 직접 속성, 항목 및 항목 메타데이터를 동적으로 생성, 삭제, 결합 또는 변경할 수 있습니다.

다음 예제를 비교해 보면, 예제 1에서는 CreateItem 작업을 사용하여 작업 매개 변수를 추가하고 메타데이터와 함께 새 항목 목록을 만드는 방법을 보여 주며, 예제 3에서는 ItemGroup에 메타데이터를 직접 추가하는 새로운 메서드를 보여 줍니다.

예제 1: CreateItem 작업을 사용하여 작업 매개 변수를 추가하는 간단한 예제. 첫 번째 대상은 CreateItem 작업을 사용하여 CultureResource라는 새 항목 목록을 동적으로 만들고 두 번째 대상은 원래 목록에 있는 모든 Culture 리소스에 대해 TargetDirectory라는 새 메타데이터를 추가합니다.

<Target Name="GenerateBeforeCompile">
     <CreateItem Include="SomeGeneratedCode.cs">
        <Output TaskParameter="Include" ItemName="Compile" /> 
    </CreateItem>
</Target>

<Target Name="ProcessCultureResources">
    <CreateItem Include="@(EmbeddedResource)" 
      Condition="'%(Culture)' != ''"
      AdditionalMetadata="TargetDirectory=%
      (EmbeddedResource.Culture)">
    <Output TaskParameter="Include" ItemName="CultureResource" />
    </CreateItem>
</Target>

예제 2: 이제 ItemGroup에 매개 변수와 메타데이터를 직접 추가하여 이전 예제와 동일한 결과를 얻을 수 있습니다.

<Target Name="GenerateBeforeCompile">
     <ItemGroup>
        <Compile Include="SomeGeneratedCode.cs" />
    </ItemGroup>
 </Target>
 
<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
          Condition="'%(EmbeddedResource.Culture)' != ''">
             <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

항목 제거

이전 버전의 MSBuild에서는 목록에 있는 항목을 생략하려면 새 목록을 만들어야 했지만 이제 다음과 같이 새 Remove 매개 변수를 사용하여 항목을 직접 제거할 수 있습니다.

<ItemGroup>
    <!—Remove *.licx from the EmbeddedResource list - ->
    <EmbeddedResource Remove="*.licx" />
 
    <!—Or remove items in @(licx) from EmbeddedResource list -- >
    <EmbeddedResource Remove="@(licx)" />
</ItemGroup>

참고 항목

개념

MSBuild 프로젝트 파일 스키마 참조

기타 리소스

MSBuild 개념