Wie kann ich dasselbe msbuild-Ziel zweimal aufrufen?

Ich habe das folgende Msbuild-Skript:

<?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>

Ich habe die Körper der Ziele entfernt, um Platz zu sparen und weil sie irrelevant sind. Wenn jedoch jemand denkt, dass dies der Fall ist, werde ich ihn einbeziehen.

Wie man sieht, gibt es auf jeden Fall ein Ziel -KillServerHosts, die ich zweimal und aus gutem Grund aufrufen möchte. Einmal vor dem Build, um sicherzustellen, dass keine Assemblys gesperrt sind, und ein anderes Mal nach Abschluss der Tests, um die Tabelle zu bereinigen.

Natürlich versuchen, das Ziel aufzurufenKillServerHosts zweimal funktioniert nicht, MSBuild weigert sich, dasselbe Ziel zweimal zu erstellen. Also versuche ich zu betrügen, indem ich das Ziel aufrufeKillServerHosts2. Das Problem ist, dass es manchmal funktioniert und manchmal nicht.

Wenn ich das laufen lasseKillServerHosts Ziel von der Kommandozeile aus tötet es immer die relevanten Server-Hosts, so dass es in dieser Hinsicht gut funktioniert.

Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage