3

リスト内の顧客ごとに 1 回プロジェクトを展開するために、MSBuild スクリプトの 1 つでバッチ処理の使用を開始しました。すべてが計画どおりに進んでいるように見えましたが、奇妙な問題を発見しました。各反復の終わりに、タスクは MSI ファイルのコピーを作成し、それを顧客固有のディレクトリに配置することになっています。特定のファイル名。MSI ファイルには適切な名前が付けられますが、両方の MSI ファイルが同じフォルダー (「Customer2」に属する) にコピーされます。

ビルド ログを見ると、ビルドの最後に両方のコピー タスクが完了していることがわかります。誰かがなぜこれが起こっているのか説明できますか? 私が望むのは、次の顧客に進む前に「Deploy」ターゲット全体を実行することです。

これが 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>

更新: 「Exec」呼び出しでプロパティ%(Customer.Identity)を使用する代わりに、Iterator を直接参照すると機能します。$(DeploymentDirectory)このような:

<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」というプロパティが参照されたときに正しい顧客で更新されていないようです。ループの各反復でプロパティが「更新」されていることを確認するために他にできることはありますか?

4

1 に答える 1

3

私はあなたがこのようなことをしていると思います:

<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

では、個々のコマンドではなく、ターゲット全体が繰り返されますか?

于 2013-08-19T13:23:18.030 に答える