Como invocar o mesmo alvo msbuild duas vezes?
Eu tenho o seguinte script msbuild:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="All">
<PropertyGroup>
...
</PropertyGroup>
<UsingTask AssemblyFile="$(GallioTaskPath)" TaskName="Gallio.MSBuildTasks.Gallio" />
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<ItemGroup>
...
</ItemGroup>
<Target Name="CheckServerHostsItemGroup"
Condition="'$(NoServerHosts)' != True">
...
</Target>
<Target Name="RunServerHosts" DependsOnTargets="CheckServerHostsItemGroup"
Condition="'$(NoServerHosts)' != True">
...
</Target>
<Target Name="KillServerHosts" DependsOnTargets="CheckServerHostsItemGroup"
Condition="'$(NoServerHosts)' != True">
...
</Target>
<Target Name="KillServerHosts2"
Condition="'$(NoServerHosts)' != True">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="KillServerHosts" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="All" DependsOnTargets="Build;RunServerHosts;Test;KillServerHosts2">
<OnError ExecuteTargets="KillServerHosts2" />
</Target>
<Target Name="Test">
...
<Error Text="Tests execution failed with exit code $(ExitCode)" Condition="'$(ExitCode)' != 0" />
</Target>
<Target Name="CheckSolutionsItemGroup">
...
</Target>
<Target Name="Build" DependsOnTargets="CheckSolutionsItemGroup;KillServerHosts">
...
</Target>
<Target Name="Clean" DependsOnTargets="CheckSolutionsItemGroup;KillServerHosts">
...
</Target>
</Project>
Eu removi os corpos dos alvos para economizar espaço e porque eles são irrelevantes. No entanto, se alguém pensa que eles são, vou incluí-los.
De qualquer forma, como se pode ver, existe um alvo -KillServerHosts
que desejo invocar duas vezes e por um bom motivo. Uma vez antes da compilação, para garantir que nenhum assembly seja bloqueado e o outro tempo após os testes, conclua para "limpar a tabela".
Naturalmente, tentando invocar o alvoKillServerHosts
duas vezes não funciona, o MSBuild se recusa a construir o mesmo destino duas vezes. Então, eu estou tentando enganar invocando o alvoKillServerHosts2
. O problema é que às vezes funciona e às vezes não.
Se eu corro oKillServerHosts
O alvo da linha de comando sempre mata os hosts relevantes do servidor, portanto, a partir deste ponto, ele funciona bem.
Alguma ideia?