Visual Studio Online/Azure使用Powershell停止和启动web应用程序

Visual Studio Online/Azure使用Powershell停止和启动web应用程序,powershell,azure,azure-devops,Powershell,Azure,Azure Devops,我正在使用VisualStudioOnline的构建工具从单个解决方案部署web应用程序。我偶尔会遇到文件锁定问题 错误:Web部署无法修改目标上的文件“Microsoft.CodeAnalysis.CSharp.dll”,因为该文件已被外部进程锁定 在谷歌搜索之后,我相信“修复”是在Azure上部署之前停止web应用程序,并在部署之后重新启动。听起来合法 然而,似乎没有一种直接在VSO的构建定义上实现这一点的直接方法。我已经创建了一个“Azure Powershell”构建任务,但它需要存储库

我正在使用VisualStudioOnline的构建工具从单个解决方案部署web应用程序。我偶尔会遇到文件锁定问题

错误:Web部署无法修改目标上的文件“Microsoft.CodeAnalysis.CSharp.dll”,因为该文件已被外部进程锁定

在谷歌搜索之后,我相信“修复”是在Azure上部署之前停止web应用程序,并在部署之后重新启动。听起来合法

然而,似乎没有一种直接在VSO的构建定义上实现这一点的直接方法。我已经创建了一个“Azure Powershell”构建任务,但它需要存储库中的PS1文件。它似乎不允许我从这里运行Azure Powershell命令(例如停止AzureWeb)。我的团队已经创建了一个工作环境,我们有一个“run.ps1”,它只执行作为参数传递的命令,但我们都不满意


我们错过了什么?必须有一种更简单的方法来实现这一点,而无需将PS1脚本签入源代码管理。

是否使用生成部署模板为包设置正确的msbuild参数?你可以看到。我将使用该模板创建一个构建,看看您是否有相同的问题。如果是这样的话,请在Twitter上ping我,我会看看我是否能弄清楚到底发生了什么。

作为一项规则,将部署软件所需的任何脚本或命令作为构建的一部分签入源代码管理是一种很好的做法。然后,它们可以轻松地重复运行,只需在构建级别进行少量配置。这提供了一致性和透明度

更好的方法是将部署脚本作为构建的一部分输出,并使用发布管理工具来控制实际部署


无论是否将配置作为代码,这都是所有开发和运营团队都应该遵守的一个信条。

检查您是否在“Web部署包”路径上使用“/”作为文件夹分隔符,而不是“\”

i、 e.变化

$(System.DefaultWorkingDirectory)/My Project/drop/MyFolder/MyFile.zip
为了

我注意到这是我得到的错误和其他错误之间的唯一区别(我添加的重启步骤没有帮助)。一旦我修改了路径,我就让它工作了


听起来很糟糕,但解决了我的问题。

我通过从Visual Studio Marketplace安装解决了这个问题。
安装后,它将允许您使用
Azure AppServices停止
Azure AppServices启动
任务在发布定义中包装
Deploy Website to Azure
任务,从而有效地消除锁定问题


是的,但最近此项目在Azure部署时遇到此错误:##[error]Web部署无法修改目标上的文件“Microsoft.codealysis.CSharp.dll”,因为它已被外部进程锁定。为了使发布操作成功,您可能需要重新启动应用程序以释放锁,或者在下一次发布尝试中使用.Net应用程序的AppOffline规则处理程序##[错误]在:。了解更多信息作为旁注,我真的不想在项目的源代码管理中检查Azure部署信息(以Grunt脚本或其他形式)。我希望它与我的构建定义相隔离。我还发现了关于AppOffline规则的链接()。这是我可以在Azure Web App部署/附加讨论步骤中传递的信息吗?我将确保我们的构建PM知道。太棒了,谢谢!我也在尝试在Azure部署步骤中添加-DoNotDelete标志。我不认为这是这个标志的意图,或者即使它会有效果,但是,嘿,这是值得尝试的。由于问题有点随机,如果问题仍然存在,我将在这里再次发布。这当然是一个意见=)不幸的是,我无法轻松验证这一点,因为我们已经转移到Jenkins服务器=/。这看起来是合法的,所以我会记下答案。当我看的时候,分机只有3/5颗星,但它看起来也相当新。希望这些问题能尽快解决。
$(System.DefaultWorkingDirectory)\My Project\drop\MyFolder\MyFile.zip