Копировать метаданные элемента в msbuild - PullRequest
0 голосов
/ 02 марта 2011

Я создаю Элемент B на основе элемента A и хотел бы скопировать все метаданные A в B (и добавить некоторые дополнительные метаданные).

<ItemGroup>
  <B Include="@A">
    <M1>%(A.M1)</M1>
    <M2>%(A.M2)</M2>
    <M3>%(A.M3)</M3>
    ...
    <M100>%(A.M100)</M100>
    ... Additional metadata specific to B ...
  </B>
</ItemGroup>

Вместо того, чтобы копировать все метаданные M1 - M100 по отдельности из A в B, можно ли указать msbuild скопировать все метаданные из A в B?
Может ли такая «пакетная копия метаданных» быть обусловленной?

Что-то вроде:

<ItemGroup>
  <B Include="@A">        
    ... Additional metadata specific to B ...
  </B>
</ItemGroup>
<CopyMetadata From="@A" To="@B" Condition="... Check something ..."/>

Спасибо.

1 Ответ

8 голосов
/ 02 марта 2011

Когда вы копируете элементы, копируются метаданные . См. Рабочий пример для MSBuild v4.0 :

<Project DefaultTargets="DoSomethingWithB" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <A Include="1">
      <M1>M1 (1)</M1>
      <M2>M2 (1)</M2>
      <M3>M3 (1)</M3>
      <N4>HERE</N4>
    </A>
    <A Include="2">
      <M1>M1 (2)</M1>
      <M2>M2 (2)</M2>
      <M3>M3 (2)</M3>
    </A>
  </ItemGroup>

  <Target Name="PrepareB" Outputs="%(A.Identity)">
     <ItemGroup>
       <B Include="@(A)">
         <M4>M4 (%(A.Identity))</M4>
         <M5 Condition="'%(A.N4)'!=''">M5 (%(A.Identity) for A.N4 != '')</M5>
       </B>
     </ItemGroup>      
  </Target>

  <Target Name="DoSomethingWithB"
          DependsOnTargets="PrepareB">

     <Message Text="ItemGroup A" />
     <Message Text="%(A.Identity): M1=%(A.M1), M2=%(A.M2), M3=%(A.M3), N4=%(A.N4)" />

     <Message Text="ItemGroup B" />
     <Message Text="%(B.Identity): M1=%(B.M1), M2=%(B.M2), M3=%(B.M3), N4=%(B.N4), M4=%    (B.M4), M5=%(B.M5)" />
  </Target>
</Project>

Выход:

ItemGroup A
1: M1 = M1 (1), M2 = M2 (1), M3 = M3 (1), N4 = ЗДЕСЬ
2: M1 = M1 (2), M2 = M2 (2), M3 = M3 (2), N4 =
ItemGroup B
1: M1 = M1 (1), M2 = M2 (1), M3 = M3 (1), N4 = ЗДЕСЬ, M4 = M4 (1), M5 = M5 (1 для A.N4! = '')
2: M1 = M1 (2), M2 = M2 (2), M3 = M3 (2), N4 =, M4 = M4 (2), M5 =

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...