У меня есть следующий сценарий MSBuild:Как дважды вызвать одну и ту же цель 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>
Я извлекал тела мишеней для экономии места и потому, что они не имеют никакого отношения. Однако, если кто-то думает, что они есть, я включу их.
Во всяком случае, как видите, есть одна цель - KillServerHosts
, которую я хочу использовать дважды и по уважительной причине. Один раз перед сборкой, чтобы гарантировать, что сборки не заблокированы, а в другое время после завершения тестов «очистить таблицу».
Естественно, что попытка вызова цели KillServerHosts
дважды не работает, MSBuild отказывается строить одну и ту же цель дважды. Итак, я пытаюсь обмануть, вызвав цель KillServerHosts2
. Проблема в том, что иногда это работает, а иногда и нет.
Если я запускаю цель KillServerHosts
из командной строки, она всегда убивает соответствующие серверные хосты, поэтому в этом отношении она отлично работает.
Любые идеи?
Атрибут должен быть «Проекты», а не «Проект». Таким образом, ваше предложение работает отлично, спасибо! –
Я только что исправил это. –