使用Visual Studio Online将ASP.NET 5构建到Azure网站时出现ERROR_FILE_IN_USE错误。

6
我创建了一个虚拟的 Hello World ASP.NET 5 (MVC 6) 项目,存储在 Visual Studio Online 的 Git 中。我按照此文档中描述的步骤构建并部署到我的 Azure Websites 中。
由于构建失败,出现了“无法还原NuGet包”或不存在的www文件夹(我必须提交到源代码控制中才能使其工作)等错误,因此我尝试了多次,但我最终成功了,应用程序已经启动运行。
我需要帮助的问题是关于持续集成配置的。在 Visual Studio 中,我选择了 CI 触发器,以便在主分支检入时构建/部署。这会触发尝试,但它始终出现以下错误:
错误代码:ERROR_FILE_IN_USE 更多信息:Web Deploy 无法修改目标上的“AspNet.Loader.dll”,因为它被外部进程锁定。为了允许发布操作成功,您可能需要重新启动应用程序以释放锁定,或者在下一次发布尝试中使用 .Net 应用程序的 AppOffline 规则处理程序。
如何解决这个问题?
谢谢。
PS:我还不知道为什么在 Azure 网站的部署下,我看不到日志。当我使用 GitHub 钩子时,它会显示所有失败/成功的部署。
通常在 Azure 下的 Web 应用程序> 部署中。
1个回答

1

我遇到了同样的问题。如果你有多个部署插槽,可能有更优雅的方法来处理它,但对于我的情况,在部署期间有一分钟的停机时间是可以接受的。

您可以修改脚本以使用Start-AzureWebsite和Stop-AzureWebsite 注意:我添加了$hostNameIndex,因为如果您添加域名,则需要更改此值。然后,您可以将其传递给Azure Powershell脚本参数。

param($websiteName, $packOutput, $hostNameIndex = 1) Stop-AzureWebsite -Name $websiteName $website = Get-AzureWebsite -Name $websiteName #获取用于MSDeploy的scm URL。 默认情况下,这将是数组中的第二个。 添加自定义域名时会更改。 此处我有默认值和2个自定义值,因此scm位于第4个位置,即索引:3。 $msdeployurl = $website.EnabledHostNames[$hostNameIndex] $publishProperties = @ { 'WebPublishMethod'= 'MSDeploy'; 'MSDeployServiceUrl'= $msdeployurl; 'DeployIisAppPath'= $website.Name; 'Username'= $website.PublishingUsername; 'Password'= $website.PublishingPassword } $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 Start-AzureWebsite -Name $websiteName 资源:
  1. https://msdn.microsoft.com/en-us/library/azure/dn495288.aspx
  2. https://msdn.microsoft.com/en-us/library/azure/dn495185.aspx
  3. https://msdn.microsoft.com/Library/vs/alm/Build/azure/deploy-aspnet5

谢谢。这是一个不错的解决方法,但我不明白为什么这个部署没有利用新编译器,只是刷新应用程序而不重新启动它.. :( - diegosasw
1
我不确定Roslyn在这里有太大的关联。使用Roslyn时,我们是在内存中编译工件,而不是在文件为基础的DLL上工作。在这里,构建正在创建dll作为构建工件,然后将它们推送到Azure。我相信即使在本地进行代码更改时,应用程序池仍然会被回收。问题在于加载器被锁定,通过停止网站来强制释放它。希望这说得通?也希望是正确的 :) - Devon Burriss
很好,有道理。 - diegosasw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接