MSBuild-等待x秒
我有一个部署web应用程序的MSBuild脚本。 它通过将“app_offline.htm”文件复制到服务器来停止当前web应用。 在此之后,它会删除其他文件,然后将新文件复制到服务器 我需要在复制'app_offline.htm'和删除之间添加延迟 我的当前脚本抛出错误,因为当脚本尝试删除文件时,文件仍然被锁定 在MSBuild中执行此操作的最佳方法是什么 我的停止任务看起来像这样MSBuild-等待x秒,msbuild,Msbuild,我有一个部署web应用程序的MSBuild脚本。 它通过将“app_offline.htm”文件复制到服务器来停止当前web应用。 在此之后,它会删除其他文件,然后将新文件复制到服务器 我需要在复制'app_offline.htm'和删除之间添加延迟 我的当前脚本抛出错误,因为当脚本尝试删除文件时,文件仍然被锁定 在MSBuild中执行此操作的最佳方法是什么 我的停止任务看起来像这样 <Target Name="Stop"> <WriteLinesToFile Fi
<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>
我的删除任务如下所示
<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>
您可以使用Exec任务从中调用一个解决方案,例如,ping是非实用的,因此应该可以工作。差不多
<Exec Command="ping -n 6 127.0.0.1 > nul"/>
<Delete Files="@(Files)" />
另请参见:将来,删除任务可能会获得与复制任务类似的参数。因此,另一种选择是使用设置了重试次数的Copy来尝试覆盖正在使用的其中一个文件,当覆盖成功时,您知道该文件不再使用,可以继续删除:
<Copy SourceFiles="someFile" DestinationFile="$(DeployDirectory)\someFileInUse"
RetryDelayMilliseconds="1000" Retries="5"/>
<Delete Files="@(Files)" />
当然,如果超时过期且文件仍在使用中,这两种解决方案都会失败,但如果不冒无限等待的风险,则无法做到这一点。有多种可用选项:
睡眠
任务。您可以这样使用它:
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<Sleep Milliseconds="300" />