Итератор пакетной обработки MSBuild отличается в пределах одной итерации

Я только что начал использовать пакетную обработку в одном из своих сценариев MSBuild, чтобы развернуть проект по одному разу для каждого клиента в списке. Казалось, все идет по плану, но потом я обнаружил странную проблему: в конце каждой итерации задача должна сделать копию MSI-файла и поместить ее в каталог, указанный клиентом, с именем клиента. конкретное имя файла. Что происходит, так это то, что файлу MSI дается соответствующее имя, НО оба файла MSI копируются в одну и ту же папку (принадлежащую «Клиенту2»).

Когда я смотрю на журналы сборки, я вижу, что обе задачи копирования выполняются в конце сборки. Может кто-нибудь объяснить, почему это происходит? Я хочу, чтобы вся цель «Развертывание» выполнялась до перехода к следующему клиенту.

Вот код MSBuild. Я вырезал некоторые вещи, которые не должны иметь значения:

<PropertyGroup>
    <Customers>Customer1;Customer2</Customers>
  </PropertyGroup>

  <ItemGroup>
    <Customer Include="$(Customers)"/>
  </ItemGroup>

  <Target Name="Deploy">

    <PropertyGroup>
      <DeploymentDirectory>$(Root)MyApplication_%(Customer.Identity)_ci</DeploymentDirectory>
      <SolutionDir>../MyApplication</SolutionDir>
      <ProjectFile>$(SolutionDir)/MyApplication/MyApplication.csproj</ProjectFile>
    </PropertyGroup>

    <MSBuild Projects="web_application_deploy.msbuild" Properties="
             ProjectFile=$(ProjectFile);
             SolutionFile=$(SolutionDir)\MyApplication.sln;
             AppName=MyApplication_%(Customer.Identity)_ci;
             TestDll=$(SolutionDir)/MyApplication.Tests/bin/Release/MyApplication.Tests.dll" />


    <!-- Build WIX project-->
    <MSBuild Condition="$(BuildWix) == true"
          Projects="$(SolutionDir)\MyApplication.Wix\MyApplication.Wix.wixproj"
          Properties="DeploymentDirectory=$(DeploymentDirectory);VersionNumber=$(BUILD_NUMBER)" />

    <!-- Copying the installer file to correct path, and renaming with version number -->
    <Exec Condition="$(BuildWix) == true"
          Command="copy &quot;$(SolutionDir)\MyApplication.Wix\bin\$(Configuration)\MyApplication.msi&quot; &quot;$(DeploymentDirectory)\MyApplication-%(Customer.Identity)-v$(BUILD_NUMBER).MSI&quot;"></Exec>
  </Target>

Обновление: это работает, если я напрямую ссылаюсь на итератор %(Customer.Identity) вместо использования свойства $(DeploymentDirectory) в вызове «Exec». Нравится:

<Exec Condition="$(BuildWix) == true"
          Command="copy &quot;$(SolutionDir)\DataGateway.Wix\bin\$(Configuration)\DataGateway.msi&quot; &quot;$(CiRoot)DataGateway_%(Customer.Identity)_ci\DataGateway-%(Customer.Identity)-v$(BUILD_NUMBER).MSI&quot;"></Exec>

Таким образом, похоже, что свойство под названием «DeploymentDirectory» не обновляется с правильным клиентом, когда на него ссылаются. Есть ли что-то еще, что я могу сделать, чтобы убедиться, что свойство «обновляется» на каждой итерации цикла?


person Knut Marius    schedule 19.08.2013    source источник


Ответы (1)


Я думаю, что вы делаете что-то вроде этого:

<Target Name="DeployNotBatching" >
      <Message Text="Deployment to server done here.  Deploying to server: %(Customer.Identity)" />
      <Message Text="Also called" />

</Target>

Который дает:

  Deployment to server done here.  Deploying to server: Customer1
  Deployment to server done here.  Deploying to server: Customer2
  Also called

Когда вы действительно хотите это сделать?

<Target Name="Deploy" Inputs="@(Customer)" Outputs="%(Identity)">
      <Message Text="Deployment to server done here.  Deploying to server: %(Customer.Identity)" />
      <Message Text="Also called" />

</Target>

Это приводит к:

Deploy:
  Deployment to server done here.  Deploying to server: Customer1
  Also called
Deploy:
  Deployment to server done here.  Deploying to server: Customer2
  Also called

Значит, повторяется вся цель, а не отдельная команда?

person James Woolfenden    schedule 19.08.2013
comment
Да, большое спасибо, что прояснили это :) Думаю, я немного запутался в том, как работает пакетная обработка. Входов/выходов определенно недоставало! - person Knut Marius; 20.08.2013