항목 및 속성 조작에 사용할 수 있는 새 메서드(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>