2009-04-28 4 views
1

나는 msbuild 프로젝트를 가지고있어 결과가 왜 그런지 궁금합니다. 그것은 어떤 종류의 문제 또는 어떤 것을 일으키는 것은 아니지만 그것을 시도하고 더 잘 이해하고자합니다. MSBuild : Items + Batching + CreateItem + Transforms Question

<?xml version="1.0" encoding="utf-8" ?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="TestTarget1;TestTarget2" ToolsVersion="3.5"> 

    <ItemGroup> 
    <PathDir Include="C:\RootDir\UniqueDir1"/> 
    <PathDir Include="C:\RootDir\UniqueDir2" /> 
    </ItemGroup> 

    <Target Name="TestTarget1" Outputs="%(PathDir.Identity)"> 
    <PropertyGroup> 
     <RootPath>%(PathDir.Identity)</RootPath> 
    </PropertyGroup> 

    <ItemGroup> 
     <SubDirectory Include="Common1"/> 
     <SubDirectory Include="Common2"/> 
    </ItemGroup> 

    <CreateItem Include="@(SubDirectory->'$(RootPath)\%(Identity)')"> 
     <Output TaskParameter="Include" ItemName="FullPath"/> 
    </CreateItem> 

    <Message Text="@(FullPath)"/> 
    </Target> 

    <Target Name="TestTarget2"> 
    <Message Text="@(FullPath)"/> 
    </Target> 

</Project> 

그래서 나는 고유 한 두 가지 경로가 각에서 나는 특유의 각 경로에 같은 이름을 가진 두 개의 디렉토리가 있습니다. target1에서 PathDir의 항목 ID에 대해 일괄 처리 한 다음 고유 디렉터리에있는 공용 폴더 이름이 들어있는 항목 SubDirectory에 대한 변환을 수행하여 전체 경로가 포함 된 새 항목을 만듭니다. 다음과 같이 그래서 어쨌든, 그 후, 대상의 출력은 다음과 같습니다

대상 1 :

C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2 
    C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2 

대상 2 :

C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2 

그래서 내 생각 내 질문은 ... 않는 이유 target1은 일괄 처리중인 디렉토리가있는 디렉토리 만 표시합니까? 아마도 일괄 처리와 관련이 있다는 것을 알지만, 내가 아는 전부입니다.

답변

0

가 아닌 대상을 일괄하는 1X4

2

반대로 2 × 2를 일으키는 것을

<CreateItem Include="@(SubDirectory->'$(RootPath)\%(Identity)')"> 

와 결합

<PropertyGroup> 
    <RootPath>%(PathDir.Identity)</RootPath> 
</PropertyGroup> 

다른 독립적 exectues 그것을 인 동일한 배치 표적의 사형 집행. 그래서 첫 번째 실행에 당신은 항목이 보이지 않습니다 때문에 그런 다음 FullPath는의 값을 채워 목표의 두 번째 실행에

C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2 

가 될 내용

C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2 

에 FullPath는 항목을 채워 동일한 일괄 처리 된 대상은 두 번째 패스가 FullPath 항목을 "보지"않습니다. 그러나 TestTarget1이 완료되면 FullPath 값이 단일 값으로 결합됩니다.

C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2 

그 위로를 명확합니까? 일괄 처리는 때때로 혼란 스러울 수 있습니다.

: 여기

는 배치에 대한 몇 가지 링크입니다