【问题标题】:Mapping data between itemgroup在 itemgroup 之间映射数据
【发布时间】:2012-06-29 09:35:41
【问题描述】:

我有两个项目组

<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:\code2\drvs\gpd\gpd1.GPD

d:\code2\drvs\gpd\gpd2.GPD

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

d:\code3\drvs\gpd\gpd2.GPD

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

d:\code4\drvs\gpd\gpd2.GPD

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

d:\code5\drvs\gpd\gpd2.GPD

直到------

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

d:\code1000\drvs\gpd\gpd2.GPD

请帮忙

【问题讨论】:

    标签: tfs msbuild itemgroup


    【解决方案1】:

    如果您不坚持确切的顺序(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>
    

    【讨论】:

    • 非常感谢 Filburt 感谢您对我的问题的快速反应但还有一个问题仍然存在目标的输入输出参数未采用实际值。这可能是由于在目标内声明的 itemgroup .有什么办法可以解决
    • 查看我的更新示例,使用 CreateItem 任务提供可在目标范围之外访问的 ItemGroup。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2020-05-29
    • 2021-08-04
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多