问题
尝试从TFS CI发布到Azure Web App时出现部署错误。文件被锁定,这会阻止构建更新。
症状
错误
Web部署任务失败。 (Web Deploy无法修改该文件 'msvcr100.dll'在目的地上,因为它被外部锁定 处理。为了使发布操作成功,您可以 需要重新启动应用程序以释放锁定,或使用 下次发布时.Net应用程序的AppOffline规则处理程序 尝试。了解更多信息: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE。)
链接上的信息不是很有帮助。
ERROR_FILE_IN_USE 诊断 - 目标文件无法覆盖或删除,因为它当前正在使用中。 解决方案 - 确保在执行同步之前未使用目标文件。如果要将内容同步到网站 在IIS 7或更高版本上托管(使用appHostConfig,iisApp或 contentPath providers),考虑在期间使应用程序脱机 通过启用appOffline规则进行同步。
尝试的决议
修改
How to take web app offline while publishing?处理使用EnableMSDeployAppOffline配置使应用程序脱机 - 遗憾的是,只有在通过Visual Studio(而非CI)执行WebDeploy时才支持此配置。
答案 0 :(得分:2)
您可以使用CI中的Web Deploy v3来部署您的网络应用。
在Web Deploy V3中,我们添加了自动获取ASP.Net的支持 应用程序在发布之前脱机。这对用户来说很有用 想确保他们的应用程序没有锁定文件 (例如,SQL CE sdf文件只允许一个文件连接到。) 被覆盖的时间,或者如果他们想要确保访问者 他们的网站不会影响发布过程。发布过程中 完成后,将删除App_Offline.htm文件和该站点 将再次在线。
或者您可以添加以下PowerShell脚本以将Web应用程序部署到Azure:
param($websiteName, $packOutput)
$website = Get-AzureWebsite -Name $websiteName
# get the scm url to use with MSDeploy. By default this will be the second in the array
$msdeployurl = $website.EnabledHostNames[1]
$publishProperties = @{'WebPublishMethod'='MSDeploy';
'MSDeployServiceUrl'=$msdeployurl;
'DeployIisAppPath'=$website.Name;
'Username'=$website.PublishingUsername;
'Password'=$website.PublishingPassword}
Write-Output "Stopping web app..."
Stop-AzureWebsite -Name $websiteName
Write-Output "Publishing web app..."
$publishScript = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\default-publish.ps1"
. $publishScript -publishProperties $publishProperties -packOutput $packOutput
Write-Output "Starting web app..."
Start-AzureWebsite -Name $websiteName
参考文献:https://msdn.microsoft.com/en-us/Library/vs/alm/Build/azure/deploy-aspnet5
答案 1 :(得分:0)