Я только что начал использовать пакетную обработку в одном из своих сценариев 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 "$(SolutionDir)\MyApplication.Wix\bin\$(Configuration)\MyApplication.msi" "$(DeploymentDirectory)\MyApplication-%(Customer.Identity)-v$(BUILD_NUMBER).MSI""></Exec>
</Target>
Обновление: это работает, если я напрямую ссылаюсь на итератор %(Customer.Identity)
вместо использования свойства $(DeploymentDirectory)
в вызове «Exec». Нравится:
<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» не обновляется с правильным клиентом, когда на него ссылаются. Есть ли что-то еще, что я могу сделать, чтобы убедиться, что свойство «обновляется» на каждой итерации цикла?