Tôi có kịch bản msbuild sau:Làm thế nào để gọi cùng một mục tiêu msbuild hai lần?
<?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>
Tôi đã gỡ bỏ các cơ quan trong những mục tiêu để tiết kiệm không gian và bởi vì họ là không thích hợp. Tuy nhiên, nếu ai đó nghĩ rằng họ là, tôi sẽ bao gồm chúng.
Dù sao, như người ta có thể thấy, có một mục tiêu - KillServerHosts
, mà tôi muốn gọi hai lần và vì một lý do chính đáng. Một lần trước khi xây dựng, để đảm bảo không có hội đồng bị khóa và thời gian khác sau khi các bài kiểm tra hoàn thành để "dọn dẹp bảng".
Đương nhiên, cố gắng gọi mục tiêu KillServerHosts
hai lần không hoạt động, MSBuild từ chối xây dựng cùng một mục tiêu hai lần. Vì vậy, tôi đang cố gắng để lừa dối bằng cách gọi mục tiêu KillServerHosts2
. Vấn đề là đôi khi nó hoạt động và đôi khi nó không.
Nếu tôi chạy mục tiêu KillServerHosts
từ dòng lệnh, nó luôn giết chết máy chủ lưu trữ có liên quan, do đó, từ khía cạnh này, nó hoạt động tốt.
Bất kỳ ý tưởng nào?
Thuộc tính phải là 'Dự án', không phải là 'Dự án'. Bằng cách đó, đề xuất của bạn hoạt động hoàn hảo, cảm ơn! –
Tôi vừa sửa nó. –