由于文件锁定(msvcr100.dll),TFS CI构建到Azure Web App(App Service)失败

时间:2016-01-08 02:38:35

标签: c# azure visual-studio-2013 tfs

问题

尝试从TFS CI发布到Azure Web App时出现部署错误。文件被锁定,这会阻止构建更新。

症状

  • 手动发布(Web部署从Visual Studio内部发布)通常会成功。
  • 停止Web应用程序并发布允许它成功,但是如果我们需要每次都需要停止并启动Web App,这会使我们的CI失败。
  • CI发布到Web角色,而工作者角色似乎没有此问题,我们只在发布到Web Apps(以前的网站,当前的Azure门户术语现在是App Service)时才会发布。
  • 只有通过TFS从CI版本发布才能以这种方式一致地失败。

错误

  

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时才支持此配置。

2 个答案:

答案 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)

新的“部署AzureRM Web App”任务有一个选项可以使应用程序脱机,这将防止此错误。

查看截图复选框

enter image description here