2012-02-10 3 views
3

는 여기에 MSBuild 스크립트 것 : 결과는이 목표에 ItemGroup에 메타 데이터를 정의 내에 잘 알려진 항목 메타 데이터를 참조하는

D:\t\File1.txt to dest\File1.txt 
    D:\t\File2.txt to dest\File2.txt 
    D:\t\File3.txt to dest\File3.txt 
    D:\t\File4.txt to dest\File4.txt 

그러나 :

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="AugmentItemGroup" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
<ItemGroup> 
    <ItmGrp Include="File1.txt"> 
     <Dest>dest\%(FileName)%(Extension)</Dest> 
    </ItmGrp> 
    <ItmGrp Include="File2.txt"> 
     <Dest>dest\%(FileName)%(Extension)</Dest> 
    </ItmGrp> 
    <ItmGrp Include="File3.txt"> 
     <Dest>dest\%(FileName)%(Extension)</Dest> 
    </ItmGrp> 
    </ItemGroup> 

    <Target Name="AugmentItemGroup"> 
    <ItemGroup> 
     <ItmGrp Include="File4.txt"> 
     <Dest>dest\%(FileName)%(Extension)</Dest> 
     </ItmGrp>   
    </ItemGroup> 
    <Message Text="%(ItmGrp.FullPath) to %(ItmGrp.Dest)" /> 
    </Target> 
</Project> 

내가 기대하는 출력은가 :

D:\t\File1.txt to dest\File1.txt 
    D:\t\File2.txt to dest\File2.txt 
    D:\t\File3.txt to dest\File3.txt 
    D:\t\File4.txt to dest\File1.txt 
    D:\t\File4.txt to dest\File2.txt 
    D:\t\File4.txt to dest\File3.txt 

%(FileName)%(Extension) 잘 알려진 메타 데이터 referen의 동작은 ItemGroup이 대상 안에있을 때 ce는 다릅니다.

대상 내부에서 "외부 대상"동작을 수행 할 수 있습니까?

답변

5

이렇게하면 원하는 결과를 얻을 수 있습니다. 그것은 일반적인 경우에 올바른 접근하지 않을 수 있지만, 그것은 사용자 정의함으로써 "File4"로 발생하는 배치를 피하지 계산 항목 정의의 일부 메타 데이터 :

<Project 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
    DefaultTargets="AugmentItemGroup" 
    ToolsVersion="4.0"> 
    <ItemDefinitionGroup> 
     <ItmGrp> 
     <Dest>dest\%(FileName)%(Extension)</Dest> 
     </ItmGrp> 
    </ItemDefinitionGroup> 

    <ItemGroup> 
     <ItmGrp Include="File1.txt" /> 
     <ItmGrp Include="File2.txt" /> 
     <ItmGrp Include="File3.txt" /> 
    </ItemGroup> 

    <Target Name="AugmentItemGroup"> 
     <ItemGroup> 
     <ItmGrp Include="File4.txt" /> 
     </ItemGroup> 
     <Message Text="%(ItmGrp.FullPath) to %(ItmGrp.Dest)" /> 
    </Target> 
</Project> 

편집 :

를 71

, # 70 MSBuild Trickery 트릭에서 발췌

<Project ...> 
    <ItemDefinitionGroup> 
     <ItmGrp> 
      <_Dest /> 
     </ItmGrp> 
    </ItemDefinitionGroup> 

    <ItemGroup> 
     <ItmGrp Include="File1.txt"><Dest>dest1</Dest></ItmGrp> 
     <ItmGrp Include="File2.txt"><Dest>dest2</Dest></ItmGrp> 
     <ItmGrp Include="File3.txt"><Dest>dest3</Dest></ItmGrp> 
    </ItemGroup> 

    <Target Name="AugmentItemGroup"> 
     <ItemGroup> 
      <ItmGrp Include="File4.txt"><Dest>dest4</Dest></ItmGrp> 
      <ItmGrp> 
      <_Dest>%(Dest)\%(FileName)%(Extension)</_Dest> 
      </ItmGrp> 
     </ItemGroup> 
     <Message Text="%(ItmGrp.FullPath) to %(ItmGrp._Dest)" /> 
    </Target> 
</Project> 

: (귀하의 의견은 아래 말한대로) 각 항목 % (신지)에 대해 다른 값을 갖는 경우

, 당신은 최종 계산 된 값을 확인해야합니다3210

+0

이 방법의 문제점은 "dest"부분이 항목마다 다를 수 있으므로 동일한 정의를 그룹의 모든 항목에 적용 할 수 없다는 것입니다. – axk

+1

그런 다음 위의 두 번째 방법을 시도해보십시오. Dest 대 _Dest의 사용에주의하십시오 –

+0

이것은 완전히 다른 작업을 도와주었습니다. 감사합니다. 또한 책 링크의 경우 구매할 것입니다. –