Вложенная целевая пакетная обработка в MSBuild?

Я хочу выполнить действие для DeploymentTarget, которых может быть более 1 для каждого ProjectsForDeployment. Я знаю, что если бы для каждого ProjectsForDeployment был только 1 дочерний объект DeploymentTarget, целевая пакетная обработка работала бы, но что произойдет, если есть несколько дочерних элементов? Можно ли по-прежнему запускать ProcessDeployableObject 4 раза против A1/A2/B1/B2, сохраняя при этом ссылки на братьев и сестер и родителя?

Спасибо!

      <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="Deploy" >
    <CallTarget Targets="ProcessDeployableProject" />
  </Target>
  
  <Target Name="ProcessDeployableProject" Inputs="@(ProjectsForDeployment)" Outputs="%(ProjectsForDeployment.Identity)\dummy.txt" >
      <!-- Processing goes here for %(ProjectsForDeployment.DeploymentTarget), needs OtherMetadataWeNeed and ProjectsForDeployment.Identity too. -->
  </Target>

  <ItemGroup>
    <ProjectsForDeployment Include="/src/A/A.csproj" >
      <DeploymentTarget>A1</DeploymentTarget>
      <DeploymentTarget>A2</DeploymentTarget>
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>
    <ProjectsForDeployment Include="/src/B/B.csproj" >
      <DeploymentTarget>B1</DeploymentTarget>
      <DeploymentTarget>B2</DeploymentTarget>
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>
  </ItemGroup>
</Project>

1 ответ

Чтобы выполнить четыре раза, вы должны написать четыре элемента, а не два элемента.

На вашей стороне DeploymentTarget A2будет перезаписан с A1потому что они находятся под одним и тем же пунктом.

Чтобы решить эту проблему, вы должны разделить их, что больше похоже на CSProj, работающий с DeploymentTarget по одному. И когда вы создаете свой проект с помощью командной строки msbuild, каждая команда должна работать с одной конфигурацией и платформой.

Использовать это:

      <ItemGroup>
    <ProjectsForDeployment Include="/src/A/A.csproj" >
      <DeploymentTarget>A1</DeploymentTarget>
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>
 
    <ProjectsForDeployment Include="/src/A/A.csproj" >
      <DeploymentTarget>A2</DeploymentTarget>
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>


    <ProjectsForDeployment Include="/src/B/B.csproj" >
      <DeploymentTarget>B1</DeploymentTarget>    
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>

    <ProjectsForDeployment Include="/src/B/B.csproj" >
      <DeploymentTarget>B2</DeploymentTarget>    
      <OtherMetadataWeNeed>Metadata</OtherMetadataWeNeed>
    </ProjectsForDeployment>
  </ItemGroup>
Другие вопросы по тегам