MMSBUILD-等待X秒

问题描述 投票:0回答:2
<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
msbuild
2个回答
21
投票

MMSBUILD扩展包
    还包含提供睡眠功能的内置任务。用法的示例
  1. 在这里

    当然,任何类型的CMD兼容等待都可以通过

    <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
    <Sleep Milliseconds="300" />
    
    命令来工作:

    提到
  2. Thread
  3. 我也很好地为我工作了。

    您可以为此目的定义MSBUILD内联C#任务:
    Exec

  4. 您可以使用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" />
      如果超时到期,并且文件仍在使用中,则两种解决方案都会失败,但是在没有无限等待的情况下可以做到这一点。
    late-joining更新@igorlabutin的自定义睡眠任务dotnet8+ era:
  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)" />
    

4
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.