MSBuild 항목
항목은 빌드 시스템에 대한 입력이며, 일반적으로 파일을 나타냅니다. 항목은 해당 요소 이름에 따라 항목 형식으로 그룹화됩니다. 항목 형식은 작업의 매개 변수로 사용할 수 있는 항목의 명명된 목록입니다. 작업은 항목 값을 사용하여 빌드 프로세스의 단계를 수행합니다.
항목이 속하는 항목 형식에 의해 항목 이름이 지정되기 때문에 "항목"과 "항목 값" 용어를 서로 바꿔 사용할 수 있습니다.
프로젝트 파일에서 항목 만들기
프로젝트 파일에서 ItemGroup 요소의 자식 요소로 항목을 선언합니다. 자식 요소의 이름은 항목의 형식입니다. 요소의 Include 특성은 해당 항목 형식에 포함할 항목(파일)을 지정합니다. 예를 들어, 다음 XML은 두 개의 파일을 포함하는 Compile이라는 항목 형식을 만듭니다.
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
"file2.cs" 항목은 "file1.cs" 항목을 바꾸지 않으며, 대신 Compile 항목 형식의 값 목록에 추가됩니다. 빌드 평가 단계 중에는 항목 형식에서 항목을 제거할 수 없습니다.
다음 XML은 Include 특성 하나에 두 파일을 모두 선언하여 동일한 항목 형식을 만듭니다. 파일 이름은 세미콜론으로 구분됩니다.
<ItemGroup>
<Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>
실행 중에 항목 만들기
Target 요소 외부에 배치된 항목의 값은 빌드 평가 단계 중에 할당됩니다. 이후 실행 단계에서 다음과 같이 항목을 만들거나 수정할 수 있습니다.
임의의 작업에서 항목을 내보낼 수 있습니다. 항목을 내보내려면 Task 요소에 ItemName 특성을 가진 자식 Output 요소가 있어야 합니다.
CreateItem 작업에서 항목을 내보낼 수 있습니다. 이 사용법은 사용되지 않습니다.
.NET Framework 3.5부터는 항목 요소가 있을 수 있는 ItemGroup 요소를 Target 요소에 포함할 수 있습니다.
프로젝트 파일에서 항목 참조
프로젝트 파일 전체에서 @(ItemType) 구문을 사용하여 항목 형식을 참조합니다. 예를 들어, 이전 예제의 항목 형식은 @(Compile)로 참조됩니다. 이 구문을 사용하면 항목 형식을 작업의 매개 변수로 지정하여 항목을 해당 작업으로 전달할 수 있습니다. 자세한 내용은 방법: 빌드할 파일 선택를 참조하십시오.
기본적으로 한 항목 형식의 항목은 확장될 경우 세미콜론(;)으로 구분됩니다. 기본값이 아닌 구분 기호를 지정하려면 @(ItemType, 'separator') 구문을 사용합니다. 자세한 내용은 방법: 항목 목록을 쉼표로 구분하여 표시를 참조하십시오.
와일드카드를 사용하여 항목 지정
**, * 및 ? 와일드카드를 사용하면 각 파일을 하나씩 나열하는 대신 파일 그룹을 빌드의 입력으로 지정할 수 있습니다.
? 와일드카드 문자는 단일 문자를 찾습니다.
* 와일드카드 문자는 0개 이상의 문자를 찾습니다.
** 와일드카드 문자 시퀀스는 부분 경로를 찾습니다.
예를 들어, 프로젝트 파일이 포함된 디렉터리에 있는 모든 .cs 파일을 지정하려면 프로젝트 파일에 다음 요소를 사용합니다.
<CSFile Include="*.cs"/>
D: 드라이브의 모든 .vb 파일을 선택하는 요소는 다음과 같습니다.
<VBFile Include="D:/**/*.vb"/>.
와일드카드 문자에 대한 자세한 내용은 방법: 빌드할 파일 선택를 참조하십시오.
Exclude 특성 사용
항목 요소는 항목 형식에서 특정 항목(파일)을 제외하는 Exclude 특성을 포함할 수 있습니다. Exclude 특성은 일반적으로 와일드카드 문자와 함께 사용됩니다. 예를 들어, 다음 XML은 DoNotBuild.cs 파일을 제외하고 디렉터리에 있는 모든 .cs 파일을 CSFile 항목 형식에 추가합니다.
<ItemGroup>
<CSFile Include="*.cs" Exclude="DoNotBuild.cs"/>
</ItemGroup>
두 특성을 모두 포함하는 항목 요소에서 Exclude 특성은 Include 특성에 의해 추가된 항목에만 영향을 줍니다. 다음 예제를 참조하십시오.
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">
이 예제에서는 앞에 있는 항목 요소에서 추가된 Form1.cs 파일을 제외하지 않습니다.
자세한 내용은 방법: 빌드에서 파일 제외를 참조하십시오.
Remove 특성 사용
.NET Framework 3.5부터는 항목 요소가 있을 수 있는 ItemGroup 요소를 Target 요소에 포함할 수 있습니다. 이러한 항목 요소는 항목 형식에서 특정 항목(파일)을 제거하는 Remove 특성을 포함할 수 있습니다. 예를 들어, 다음 XML은 Compile 항목 형식에서 모든 .config 파일을 제거합니다.
<Target>
<ItemGroup>
<Compile Remove="*.config"/>
</ItemGroup>
</Target>
항목 메타데이터
항목은 Include 및 Exclude 특성에서 가져온 정보뿐 아니라 메타데이터도 포함할 수 있습니다. 이 메타데이터는 항목에 대한 추가 정보를 필요로 하는 작업에 의해 사용되거나 작업 및 대상을 일괄 처리하는 데 사용될 수 있습니다. 일괄 처리에 대한 자세한 내용은 MSBuild 일괄 처리를 참조하십시오.
메타데이터는 프로젝트 파일에서 항목 요소의 자식 요소로 선언된 키-값 쌍의 컬렉션입니다. 자식 요소의 이름은 메타데이터 이름이고, 자식 요소의 값은 메타데이터 값입니다.
메타데이터는 해당 메타데이터를 포함하는 항목 요소와 연결됩니다. 예를 들어, 다음 XML은 값이 Fr인 Culture 메타데이터를 CSFile 항목 형식의 "one.cs" 항목과 "two.cs" 항목에 모두 추가합니다.
<ItemGroup>
<CSFile Include="one.cs;two.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
한 항목에 0개 이상의 메타데이터 값이 있을 수 있습니다. 언제든지 메타데이터 값을 변경할 수 있습니다. 메타데이터를 빈 값으로 설정하면 실제로 빌드에서 해당 메타데이터가 제거됩니다.
프로젝트 파일에서 항목 메타데이터 참조
프로젝트 파일 전체에서 %(ItemMetadataName) 구문을 사용하여 항목 메타데이터를 참조할 수 있습니다. 모호한 경우 %(ItemType.ItemMetaDataName)과 같이 항목 형식의 이름을 사용하여 항목 메타데이터를 한정할 수 있습니다. 다음 예제에서는 Display 메타데이터를 사용하여 Message 작업을 일괄 처리합니다. 항목 메타데이터를 일괄 처리에 사용하는 방법에 대한 자세한 내용은 작업 일괄 처리의 항목 메타데이터를 참조하십시오.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Stuff Include="One.cs" >
<Display>false</Display>
</Stuff>
<Stuff Include="Two.cs">
<Display>true</Display>
</Stuff>
</ItemGroup>
<Target Name="Batching">
<Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/>
</Target>
</Project>
잘 알려진 항목 메타데이터
항목 형식에 항목을 추가하면 잘 알려진 메타데이터가 해당 항목에 할당됩니다. 예를 들어, 모든 항목에는 잘 알려진 메타데이터 %(Filename)이 있으며 이 메타데이터 값은 항목의 파일 이름입니다. 잘 알려진 항목 메타데이터 목록은 MSBuild 잘 알려인 항목 메타데이터를 참조하십시오.
메타데이터를 사용하여 항목 형식 변환
메타데이터를 사용하여 항목 목록을 새 항목 목록으로 변환할 수 있습니다. 예를 들어, @(CppFiles -> '%(Filename).obj') 식을 사용하면 .cpp 파일을 나타내는 항목이 있는 항목 형식 CppFiles를 해당하는 .obj 파일 목록으로 변환할 수 있습니다.
다음 코드에서는 Culture 메타데이터가 있는 모든 EmbeddedResource 항목의 복사본을 포함하는 CultureResource 항목 형식을 만듭니다. Culture 메타데이터 값이 새 메타데이터 CultureResource.TargetDirectory의 값이 됩니다.
<Target Name="ProcessCultureResources">
<ItemGroup>
<CultureResource Include="@(EmbeddedResource)"
Condition="'%(EmbeddedResource.Culture)' != ''">
<TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
</CultureResource>
</ItemGroup>
</Target>
자세한 내용은 MSBuild 변환을 참조하십시오.
항목 정의
.NET Framework 3.5부터는 ItemDefinitionGroup 요소를 사용하여 임의의 항목 형식에 기본 메타데이터를 추가할 수 있습니다. 잘 알려진 메타데이터와 마찬가지로, 기본 메타데이터는 지정된 항목 형식의 모든 항목과 연결됩니다. 항목 정의에서 명시적으로 기본 메타데이터를 재정의할 수 있습니다. 예를 들어, 다음 XML은 Compile 항목 "one.cs"와 "three.cs"에 값이 "Monday"인 BuildDay 메타데이터를 지정하고 "two.cs" 항목에 값이 "Tuesday"인 BuildDay 메타데이터를 지정합니다.
<ItemDefinitionGroup>
<Compile>
<BuildDay>Monday</BuildDay>
</Compile>
</ItemDefinitionGroup>
<ItemGroup>
<Compile Include="one.cs;three.cs" />
<Compile Include="two.cs">
<BuildDay>Tuesday</BuildDay>
</Compile>
</ItemGroup>
자세한 내용은 항목 정의를 참조하십시오.