为什么 Visual Studio 的 Azure 部署需要这么长时间?

Why Azure deployment from Visual Studio takes so long?

我使用 Azure .NET SDK 2.6 创建了一个具有单一工作者角色的全新云服务。 RoleEntryPoint 几乎是空的。

第一次因为创建虚拟机花了一些时间。我的期望是以下发布尝试会更快。事实证明它至少需要 ~5 分钟。在 VS 中检查部署 activity 日志我看到:

20:17:06 - Checking for Remote Desktop certificate...
20:17:07 - Applying Diagnostics extension.
20:17:29 - Preparing deployment for AzureCloudService2 - 15/05/2015 20:17:03...
20:17:29 - Connecting...
20:17:29 - Verifying storage account ...
20:17:30 - Uploading Package...
20:17:51 - Updating...
20:19:59 - Instance 0 of role WorkerRole1 is ready
20:20:00 - Starting...
20:20:19 - Initializing...
20:20:19 - Created web app URL: ...
20:20:19 - Complete.

为什么更新这个应用需要2分钟? 有没有办法加快速度?

2 到 4 分钟更新 Azure 部署并没有那么多考虑到:

  1. 包括上传包
  2. 包在到达您的实例之前会在内部复制几次
  3. 我们有效地将包作为另一个磁盘安装到机器上
  4. 验证一切正常
  5. 将您的应用程序从新安装的磁盘切换到 运行(意味着停止旧的,启动新的)
  6. 卸载包含旧包的旧磁盘
  7. 通知一切正常

这是对实际情况的过度简化。所有这些都是异步发生的,如果每个项目需要 15-20 秒,你会明白我的意思。

如果您想要更快的部署,可以执行以下操作:

  1. 缩小包的大小以防里面有大文件。最好在启动时从存储中下载你的大依赖,而不是将它们捆绑在包中
  2. 如果它是一个 WebRole 并且你想快速测试更新,你可以启用 WebDeploy 作为部署的一部分,然后在 VS 中执行正常的 "Publish.." 工作流。当您从 VS 发布包时,它只是一个复选框。之后更新文件需要几秒钟。请注意,对于您想要保留的更改,您 必须 通过完全重新部署来更新云包,否则如果实例被重新映像,您将丢失更改制成。这基本上只是为了开发。
  3. 如果它是一个 WorkerRole,您可以将您的负载拆分为您的 WorkerRole 的 EntryPoint 从存储中下载、解压缩和执行的进程(简单的 .exe)。如果您有较新的版本,则只需将新包上传到存储中即可。您的 workerrole 只是监控更新版本包的存储,然后下载它,解压缩并 运行 在杀死旧文件后 运行s 新的 .exe 文件。

希望对您有所帮助。

关闭 MSBuild 输出。

在 Visual Studio 中转到 Options > Projects and Solutions > Build and Run。将两个 MSBuild 项目选项设置为安静。

当我这样做时,我发现部署时间大大减少了。