<Target Name="Stop">
<WriteLinesToFile File="$(DeployDirectory)\app_offline.htm" Lines="Offline for maintenance" Overwrite="true" Encoding="Unicode"/>
</Target>
我的删除任务看起来像这样...
<Target Name="Clean">
<ItemGroup>
<Files Include="$(DeployDirectory)\**\*" Exclude="$(DeployDirectory)\app_offline.htm" />
<Files Include="$(LogDirectory)\*" />
</ItemGroup>
<Delete Files="@(Files)" />
</Target>
有多种选择:
MMSBUILD社区任务
具有内置的任务。您可以这样使用:
Sleep
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<Sleep Milliseconds="300" />
命令来工作:
提到Thread
您可以为此目的定义MSBUILD内联C#任务:
Exec
您可以使用EXEC任务调用从Windows的命令提示符中如何入睡5秒钟的解决方案之一? (或DOS),例如ping是非文学的,因此应该起作用。像
<Exec Command="ping -n 6 127.0.0.1 > nul" />
另外,请参见https://github.com/microsoft/msbuild/issues/199
<Exec Command="sleep 5" />
如果超时到期,并且文件仍在使用中,则两种解决方案都会失败,但是在没有无限等待的情况下可以做到这一点。
<UsingTask TaskName="Sleep" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<!-- Delay in milliseconds -->
<Delay ParameterType="System.Int32" Required="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
System.Threading.Thread.Sleep(this.Delay);
]]>
</Code>
</Task>
</UsingTask>
...
<Sleep Delay="5000"/>
使用它:
<Exec Command="ping -n 6 127.0.0.1 > nul"/>
<Delete Files="@(Files)" />