我正在使用Visual Studio Online的构建工具从单一解决方案部署Web应用程序。我偶尔会遇到文件锁定问题。
错误:Web Deploy无法修改目标上的文件“Microsoft.CodeAnalysis.CSharp.dll”,因为它已被外部进程锁定。
经过一些谷歌搜索,我认为“修复”是在Azure上部署之前停止Web应用程序并在之后重新启动它。听起来合法。
但是,似乎没有直接在VSO的构建定义上直接执行此操作的方法。我已经创建了一个“Azure Powershell”构建任务,但它需要来自存储库的PS1文件。它似乎不允许我从这里运行Azure Powershell命令(例如Stop-AzureWebsite)。我的团队创建了一个解决方法,我们有一个“run.ps1”,只执行您作为参数传递的命令,但我们都不满意。
我们缺少什么?如果没有将PS1脚本检入源代码管理中,必须有一种更简单的方法。
答案 0 :(得分:3)
我通过从Visual Studio Marketplace安装Azure App Services - Start and Stop extension解决了这个问题
安装后,它允许您使用Deploy Website to Azure
和Azure AppServices Stop
任务包装发布定义中的Azure AppServices Start
任务,从而有效消除锁定问题。
答案 1 :(得分:2)
检查您是否在文件夹分隔符的“Web Deploy Package”路径上使用“/”而不是“\”。
即。变化
$(System.DefaultWorkingDirectory)/My Project/drop/MyFolder/MyFile.zip
的
$(System.DefaultWorkingDirectory)\My Project\drop\MyFolder\MyFile.zip
我注意到这是我收到错误的那个与其他错误之间的唯一区别(我添加的重启步骤没有帮助)。一旦我修改了路径,我就让它工作了。
听起来很糟糕,但解决了我的问题。
答案 2 :(得分:1)
您是否使用构建部署模板为您的软件包设置了正确的msbuild参数?你可以看到here的方式。我将使用该模板创建一个构建,看看你是否有同样的问题。如果是这样,请在Twitter @DonovanBrown上ping我,我会看看能否知道发生了什么。
答案 3 :(得分:1)
作为一项规则,最好将部署软件所需的任何脚本或命令作为构建的一部分检入源代码管理中。然后,可以在构建级别以较少的配置轻松地重复运行它们。这提供了一致性和透明度。
更好的做法是将部署脚本输出作为构建的一部分,并使用发布管理工具来控制实际部署。
无论配置为代码都是所有Dev和Ops团队应该遵守的口号。