リスト内の顧客ごとに 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 "$(SolutionDir)\MyApplication.Wix\bin\$(Configuration)\MyApplication.msi" "$(DeploymentDirectory)\MyApplication-%(Customer.Identity)-v$(BUILD_NUMBER).MSI""></Exec>
</Target>
更新: 「Exec」呼び出しでプロパティ%(Customer.Identity)
を使用する代わりに、Iterator を直接参照すると機能します。$(DeploymentDirectory)
このような:
<Exec Condition="$(BuildWix) == true"
Command="copy "$(SolutionDir)\DataGateway.Wix\bin\$(Configuration)\DataGateway.msi" "$(CiRoot)DataGateway_%(Customer.Identity)_ci\DataGateway-%(Customer.Identity)-v$(BUILD_NUMBER).MSI""></Exec>
そのため、「DeploymentDirectory」というプロパティが参照されたときに正しい顧客で更新されていないようです。ループの各反復でプロパティが「更新」されていることを確認するために他にできることはありますか?