MSBuild 항목
MSBuild 항목은 빌드 시스템에 대 한 입력 이며 일반적으로 파일을 나타냅니다. 항목은 해당 요소 이름에 따라 항목 형식으로 그룹화됩니다. 항목 형식은 작업의 매개 변수로 사용할 수 있는 항목의 명명된 목록입니다. 작업은 항목 값을 사용하여 빌드 프로세스의 단계를 수행합니다.
항목이 속하는 항목 형식으로 이름이 지정 됩니다 때문에 "항목"과 "항목 값" 같은 의미로 사용할 수 있습니다.
항목 내용
프로젝트 파일에서 항목 만들기
실행 중에 항목 만들기
프로젝트 파일에서 항목 참조
와일드카드를 사용하여 항목 지정
Exclude 특성 사용
항목 메타데이터
프로젝트 파일에서 항목 메타데이터 참조
잘 알려진 항목 메타데이터
메타 데이터를 사용 하 여 항목 형식 변환
항목 정의
대상의 항목을 Itemgroup에 대 한 특성
특성 제거
KeepMetadata 속성
RemoveMetadata 속성
KeepDuplicates 속성
프로젝트 파일에서 항목 만들기
프로젝트 파일에서 항목을 요소의 자식으로 선언 된 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>
실행 중에 항목 만들기
외부 항목 대상 요소 빌드 평가 단계 중에 값이 할당 됩니다. 이후 실행 단계 항목 작성 하거나 다음과 같은 방법으로 수정할 수 있습니다:
모든 작업 항목을 내보낼 수 있습니다. 항목을 내보내려면 Task 요소에 ItemName 특성을 가진 자식 Output 요소가 있어야 합니다.
CreateItem 작업 항목을 내보낼 수 있습니다. 이 사용법은 사용되지 않습니다.
.NET Framework 3.5부터는 항목 요소가 있을 수 있는 ItemGroup 요소를 Target 요소에 포함할 수 있습니다.
프로젝트 파일에서 항목 참조
구문을 사용 하면 항목 형식을 프로젝트 파일 전체에서 참조할 수 @(ItemType). 예를 들어, 사용 하 여 위의 예제에서 항목 형식을 참조할 때와 @(Compile). 이 구문을 사용 하 여 항목 형식에는 해당 작업의 매개 변수로 지정 하 여 작업 항목 전달할 수 있습니다. 자세한 내용은 방법: 빌드할 파일 선택을 참조하십시오.
기본적으로 항목 형식의 항목 확장 될 경우 세미콜론 (;)으로 구분 합니다. 구문을 사용할 수 있습니다 @(ItemType, '구분') 기본값이 아닌 구분 기호를 지정할 수 있습니다. 자세한 내용은 방법: 항목 목록을 쉼표로 구분하여 표시을 참조하십시오.
와일드카드를 사용하여 항목 지정
**, * 및 ? 와일드카드를 사용하면 각 파일을 하나씩 나열하는 대신 파일 그룹을 빌드의 입력으로 지정할 수 있습니다.
? 와일드카드 문자는 단일 문자를 찾습니다.
* 와일드카드 문자는 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 특성을 모두 포함 하는 항목 요소. 다음 예제에서는 앞의 항목 요소에서 추가 된 Form1.cs 파일을 제외 하지 않습니다.
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">
자세한 내용은 방법: 빌드에서 파일 제외을 참조하십시오.
항목 메타데이터
항목의 정보 외에도 메타 데이터를 포함할 수 있는 Include 및 Exclude 특성. 일괄 작업 및 대상을 또는 항목에 대 한 자세한 정보를 필요로 하는 작업으로이 메타 데이터를 사용할 수 있습니다. 자세한 내용은 MSBuild 일괄 처리을 참조하십시오.
메타데이터는 프로젝트 파일에서 항목 요소의 자식 요소로 선언된 키-값 쌍의 컬렉션입니다. 자식 요소의 이름은 메타데이터 이름이고, 자식 요소의 값은 메타데이터 값입니다.
메타데이터는 해당 메타데이터를 포함하는 항목 요소와 연결됩니다. 예를 들어, 다음 XML을 추가 Culture 값을 가진 메타 데이터 Fr "one.cs"와 "two.cs" 항목을 CSFile 항목 형식입니다.
<ItemGroup>
<CSFile Include="one.cs;two.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
한 항목에 0개 이상의 메타데이터 값이 있을 수 있습니다. 언제 든 지 메타 데이터 값을 변경할 수 있습니다. 메타 데이터를 빈 값으로 설정 하면 빌드에서 제거 효과적입니다.
프로젝트 파일에서 항목 메타데이터 참조
구문을 사용 하 여 % 전체 프로젝트 파일에서 항목 메타 데이터를 참조할 수 있습니다ItemMetadataName). 모호성을 존재 하는 경우 항목 형식 이름을 사용 하 여 참조를 한정할 수 있습니다. For example를 지정할 수 있습니다 %ItemType.ItemMetaDataName).다음 예제에서는 메시지 작업을 일괄 처리 하 디스플레이 메타 데이터를 사용 합니다. 항목 메타데이터를 일괄 처리에 사용하는 방법에 대한 자세한 내용은 작업 일괄 처리의 항목 메타데이터를 참조하십시오.
<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 표현식을 사용 하 여.cpp 파일을 해당.obj 파일 목록으로 나타내는 항목이 있는 @(CppFiles -> '%(Filename).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"는 메타 데이터 항목을 BuildDay "Monday" 값을 가진. 코드 "two.cs" 항목 메타 데이터를 제공 BuildDay "화요일" 값입니다.
<ItemDefinitionGroup>
<Compile>
<BuildDay>Monday</BuildDay>
</Compile>
</ItemDefinitionGroup>
<ItemGroup>
<Compile Include="one.cs;three.cs" />
<Compile Include="two.cs">
<BuildDay>Tuesday</BuildDay>
</Compile>
</ItemGroup>
자세한 내용은 항목 정의을 참조하십시오.
대상의 항목을 Itemgroup에 대 한 특성
.NET Framework 3.5부터는 항목 요소가 있을 수 있는 ItemGroup 요소를 Target 요소에 포함할 수 있습니다. 있는 항목에 대해 지정 하는 경우이 단원의 특성을 사용할 수 있는 ItemGroup 에 Target.
특성 제거
항목에 ItemGroup 의 대상에 포함 될 수 있습니다의 Remove 항목 형식에서 특정 항목 (파일)을 제거 하는 특성입니다. 이 특성은.NET Framework 3.5에 도입 되었습니다.
다음 예제에서는 모든.config 파일에서 컴파일 항목 형식을 제거합니다.
<Target>
<ItemGroup>
<Compile Remove="*.config"/>
</ItemGroup>
</Target>
KeepMetadata 속성
항목이 대상 내에서 생성 되는 경우 항목 요소를 포함할 수 있는 KeepMetadata 특성. 이름 세미콜론으로 구분 된 목록에 지정 된 메타 데이터에만이 특성을 지정 하는 경우 소스 항목을 대상 항목으로 전송 됩니다. 이 특성에 값을 지정 하지를 같습니다. KeepMetadata 특성.NET Framework 4.5에서 도입 되었습니다.
다음 예제에서는 사용 방법을 보여 줍니다 있는 KeepMetadata 특성입니다.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">
<ItemGroup>
<FirstItem Include="rhinoceros">
<Class>mammal</Class>
<Size>large</Size>
</FirstItem>
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<SecondItem Include="@(FirstItem)" KeepMetadata="Class" />
</ItemGroup>
<Message Text="FirstItem: %(FirstItem.Identity)" />
<Message Text=" Class: %(FirstItem.Class)" />
<Message Text=" Size: %(FirstItem.Size)" />
<Message Text="SecondItem: %(SecondItem.Identity)" />
<Message Text=" Class: %(SecondItem.Class)" />
<Message Text=" Size: %(SecondItem.Size)" />
</Target>
</Project>
<!--
Output:
FirstItem: rhinoceros
Class: mammal
Size: large
SecondItem: rhinoceros
Class: mammal
Size:
-->
RemoveMetadata 속성
항목이 대상 내에서 생성 되는 경우 항목 요소를 포함할 수 있는 RemoveMetadata 특성. 이 특성을 지정 하지 않으면 모든 메타 데이터 소스 항목에서 대상 항목 메타 데이터를 제외 하 고 세미콜론으로 구분한 이름 목록에서 이름이 포함 되어 전송 됩니다. 이 특성에 값을 지정 하지를 같습니다. RemoveMetadata 특성.NET Framework 4.5에서 도입 되었습니다.
다음 예제에서는 사용 방법을 보여 줍니다 있는 RemoveMetadata 특성입니다.
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MetadataToRemove>Size;Material</MetadataToRemove>
</PropertyGroup>
<ItemGroup>
<Item1 Include="stapler">
<Size>medium</Size>
<Color>black</Color>
<Material>plastic</Material>
</Item1>
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<Item2 Include="@(Item1)" RemoveMetadata="$(MetadataToRemove)" />
</ItemGroup>
<Message Text="Item1: %(Item1.Identity)" />
<Message Text=" Size: %(Item1.Size)" />
<Message Text=" Color: %(Item1.Color)" />
<Message Text=" Material: %(Item1.Material)" />
<Message Text="Item2: %(Item2.Identity)" />
<Message Text=" Size: %(Item2.Size)" />
<Message Text=" Color: %(Item2.Color)" />
<Message Text=" Material: %(Item2.Material)" />
</Target>
</Project>
<!--
Output:
Item1: stapler
Size: medium
Color: black
Material: plastic
Item2: stapler
Size:
Color: black
Material:
-->
KeepDuplicates 속성
항목이 대상 내에서 생성 되는 경우 항목 요소를 포함할 수 있는 KeepDuplicates 특성. KeepDuplicates되는 Boolean 항목이 기존 항목의 정확한 복제 경우 항목을 대상 그룹에 추가할지 여부를 지정 하는 특성입니다.
원본 및 대상 항목의 Include 값은 같지만 서로 다른 메타 데이터 경우 항목이 추가 됩니다 경우에 KeepDuplicates 로 설정 된 false. 이 특성에 값을 지정 하지를 같습니다. KeepDuplicates 특성.NET Framework 4.5에서 도입 되었습니다.
다음 예제에서는 사용 방법을 보여 줍니다 있는 KeepDuplicates 특성입니다.
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Item1 Include="hourglass;boomerang" />
<Item2 Include="hourglass;boomerang" />
</ItemGroup>
<Target Name="MyTarget">
<ItemGroup>
<Item1 Include="hourglass" KeepDuplicates="false" />
<Item2 Include="hourglass" />
</ItemGroup>
<Message Text="Item1: @(Item1)" />
<Message Text=" %(Item1.Identity) Count: @(Item1->Count())" />
<Message Text="Item2: @(Item2)" />
<Message Text=" %(Item2.Identity) Count: @(Item2->Count())" />
</Target>
</Project>
<!--
Output:
Item1: hourglass;boomerang
hourglass Count: 1
boomerang Count: 1
Item2: hourglass;boomerang;hourglass
hourglass Count: 2
boomerang Count: 1
-->