Mam następujący skrypt msbuild:Jak dwukrotnie wywołać ten sam cel 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>
usunąłem ciał celów, aby zaoszczędzić miejsce i dlatego są one nieistotne. Jeśli jednak ktoś myśli, że tak, to ja je uwzględnię.
W każdym razie, jak widać, jest jeden cel - KillServerHosts
, który chcę przywołać dwa razy i nie bez powodu. Raz przed kompilacją, aby upewnić się, że żadne zespoły nie są zablokowane, a drugi czas po zakończeniu testów należy "wyczyścić tabelę".
Oczywiście, próba dwukrotnego wywołania celu KillServerHosts
nie działa, MSBuild odmawia dwukrotnego zbudowania tego samego celu. Tak więc próbuję oszukać, wywołując cel KillServerHosts2
. Problem polega na tym, że czasami działa, a czasami nie.
Jeśli uruchomię cel KillServerHosts
z wiersza poleceń, zabije on zawsze odpowiednie hosty serwera, więc pod tym względem działa dobrze.
Wszelkie pomysły?
Atrybut powinien być "Projekty", a nie "Projekt". W ten sposób Twoja sugestia działa idealnie, dzięki! –
Właśnie naprawiłem to. –