在itemgroup之间映射数据

时间:2012-06-29 09:35:41

标签: tfs msbuild itemgroup

我有两个项目组

<ItemGroup>
    <Device Include="device1">    
     <Cdname>code1</Cdname>
    </Device>
     <Device Include="device2">    
      <Cdname>code2</Cdname>
    </Device>
    <Device Include="device3">    
      <Cdname>code3</Cdname>
    </Device>
    <Device Include="device4">    
      <Cdname>code4</Cdname>
    </Device>
    <Device Include="device4">    
      <Cdname>code4</Cdname>
    </Device>
    <Device Include="device5">    
      <Cdname>code5</Cdname>
    </Device>
    <Device Include="device6">    
      <Cdname>code6</Cdname>
    </Device>
    <Device Include="device7">    
      <Cdname>code7</Cdname>
    </Device>
    <Device Include="device8">    
      <Cdname>code8</Cdname>
    </Device>
    <Device Include="device9">    
      <Cdname>code9</Cdname>
    </Device>
    <Device Include="device10">    
      <Cdname>code10</Cdname>

高达

    <Device Include="device1000">    
      <Cdname>code1000</Cdname>
    </Device>
</ItemGroup>

<ItemGroup>
  <Gpdname Include="d:\gpd\gpd1.GPD">
       <GPDFile>gpd1.GPD</GPDFile>
   </Gpdname>
   <Gpdname Include="d:\gpd\gpd2.GPD">
        <GPDFile>gpd2.GPD</GPDFile>
   </Gpdname>
</ItemGroup>

我的目标如下

 <Target Name="CopyGPD" Inputs="@(Gpdname)" Outputs="d:\%(Device.Cdname)\drvs\gpd\%(GPDFile)">

完成复制过程后,gpd1.GPD和gpd2.GPD将从d:\ gpd复制到 d:\ drvs \ gpd \ gpd1.GPD和d:\ drvs \ gpd \ gpd2.GPD

但我想把它复制到

d:\ code1 \ drvs \ gpd \ gpd1.GPD

d:\ CODE1 \ DRVS \ GPD \ gpd2.GPD

d:\码2 \ DRVS \ GPD \ gpd1.GPD

d:\码2 \ DRVS \ GPD \ gpd2.GPD

d:\ CODE3 \ DRVS \ GPD \ gpd1.GPD

d:\ CODE3 \ DRVS \ GPD \ gpd2.GPD

d:\码4 \ DRVS \ GPD \ gpd1.GPD

d:\码4 \ DRVS \ GPD \ gpd2.GPD

d:\代码4 \ DRVS \ GPD \ gpd1.GPD

d:\代码4 \ DRVS \ GPD \ gpd2.GPD

高达------------------

d:\ code1000 \ DRVS \ GPD \ gpd1.GPD

d:\ code1000 \ DRVS \ GPD \ gpd2.GPD

请帮忙

1 个答案:

答案 0 :(得分:0)

如果你没有坚持确切的顺序(gdp1.GDP然后gdp2.GDP为每个Cdname),这将有助于(Phil Cupp: MSBuild Tricks I Don’t Want to Forget提供):

<Target Name="Cartesian_Device_GDP">
    <ItemGroup>
        <C Include="@(Device)">
            <A>%(Device.Cdname)</A>
        </C>
    </ItemGroup>

    <ItemGroup>
        <D Include="@(C)">
            <B>%(Gpdname.GPDFile)</B>
        </D>
    </ItemGroup>

    <CreateItem Include="@(D)">
        <Output TaskParameter="Include" ItemName="CombinedDeviceGDP" />
    </CreateItem>
</Target>

<Target Name="Msg" DependsOnTargets="Cartesian_Device_GDP">
    <Message Text="D:\%(CombinedDeviceGDP.A)\drvs\gpd\%(CombinedDeviceGDP.B)" />
</Target>