2011-09-01 3 views
2

와일드 카드와 다른 itemgroup에 itemgroup 변환 작동하지 않으면 결과 목록에 "Foo\Dir1\**\*;Foo\Dir2\**\*" 리터럴 문자열이 포함됩니다. 내가 <CreateItem> 작업을 더 이상 사용되지 사용하는 경우 그러나, 그것을 잘 작동합니다 :내가 목표 내에서 정의 된 디렉토리의 목록을

<CreateItem Include="@(FooDirs -> '%(Identity)\**\*')"> 
    <Output TaskParameter="Include" ItemName="FooFiles" /> 
</CreateItem> 

이 버그인가, 아니면 내가 뭔가를 놓친 거지?

답변

3

제대로 작업 배치하여 FooFiles을 만들 것입니다, 대신을 시도해보십시오

<Target Name="Foo"> 
    <ItemGroup> 
     <FooDirs Include="Foo\Dir1" /> 
     <FooDirs Include="Foo\Dir2" /> 
    </ItemGroup> 
    <ItemGroup> 
     <FooFiles Include="%(FooDirs.Identity)\**\*" /> 
    </ItemGroup> 
    <Message Text="%(FooFiles.Identity)" /> 
</Target> 

(5 책에서 발췌 "MSBuild에서 속임수"트릭 #) 불행하게도

+0

잠시 동안 차단 한 다음에 죽는다 OutOfMemoryException. –

+0

스크래치, 작동! '\ **'로 확장 된'.Identity'를 잊어 버렸습니다. 슬프게도 ItemGroups를 사용하는 것은 다른 문제로 인해 여전히 심각한 PITA입니다. MSBuild는 아마도 지금까지 설계된 최악의 빌드 시스템 일 것입니다. –

+0

변형이 작동하지 않는 이유를 알고 있으면 좋겠지 만 (버그 일 경우 MSDN에서 두 형식이 모두 동등해야 함을 알았습니다)이 답변으로 표시했습니다. –

관련 문제