由于此错误,我的Elastic Beanstalk安装将无法通过Visual Studio进行部署:
2016-07-01 20:45:02,627错误1 AWSBeanstalkCfnDeploy.DeploymentUtils - 部署期间出现异常。 Microsoft.Web.Deployment.DeploymentDetailedClientServerException:Web Deploy无法修改目标上的文件“msvcr100.dll”,因为它已被外部进程锁定。为了使发布操作成功,您可能需要重新启动应用程序以释放锁定,或者在下次发布尝试时使用.Net应用程序的AppOffline规则处理程序。请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE了解详情。
该链接表明我创建了一个pubxml文件,其中包含启用AppOffline的设置,但此文件似乎仅与使用内置发布功能通过VS发布相关。我没有找到任何证明这适用于AWS的文档。
如何为Elastic Beanstalk部署启用AppOffline?
谢谢!
答案 0 :(得分:3)
很抱歉,这只是一般性建议,而不是您需要的代码,但解决方案是通过.ebextensions使用挂钩。请参阅http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref-hooks.html。
您可以添加powershell脚本的执行以在解压缩更新之前添加app_offline.htm,并在部署更新后将其删除。
我们遇到了类似的问题,但是有问题的DLL(abcPDF,v9)只是被阻止了,因为我们在application_start()期间初始化它的许可,这是EB不喜欢的。所以我们将许可证转移到其他地方。
但是,我认为这种方法可行。
- 哦,也许这个容器命令对你有用。它会在它不适合我们之前回收IIS应用程序池,因为上述许可锁定了DLL。
/。ebextensions / recycleapppool.config
container_commands:
__ recycle_app_pool:
____命令:c:\ windows \ system32 \ inetsrv \ appcmd.exe回收apppool DefaultAppPool
答案 1 :(得分:2)
经过大量的实验,我能找到解决这个问题的唯一工作方法是
// in Project/.ebextensions/reset.config
container_commands:
00_nuke:
command: IISReset
waitAfterCompletion: 0
成本约为4秒的停机时间(在t2.micro上),在此期间你得到503,这当然不是很好。
请注意Github issue for this(在撰写本文时开放)。
如果您有选项,请将您的服务部署到Azure而不是AWS,并且有一些配置选项可以解决该问题(例如环境变量MSDEPLOY_RENAME_LOCKED_FILES
) - related Azure specific question。