运行 vcredist_x64.exe 作为 Azure 云服务的启动任务,osFamily="4"

Running vcredist_x64.exe as a startup task for an Azure cloud service, osFamily="4"

有几个答案(例如 this and this) and a blog post 指出如何安装 Visual C++ 2010 可再发行包作为 Azure 云服务部署的一部分。

首先将 vcredist_x64.exe 添加到 Web 项目并将其 "Copy to output directory" 属性 设置为 "Copy if newer" 或 "Copy always"。然后你对包含单行的命令文件(在我的例子中是"InstallVC.cmd")做同样的事情:

vcredist_x64.exe /q /norestart

然后编辑 ServiceDefinition.csdef 文件以包含设置

<Startup>
  <Task commandLine="InstallVC.cmd" executionContext="elevated" taskType="simple" />
</Startup>

角色内。答案和博客 post 继续指出,如果 ServiceConfiguration.csfg 上的 osFamily 设置设置为 osFamily="1" 并且需要改为设置它,则启动任务将挂起到 osFamily="2".

我的设置为 osFamily="4",但部署失败。我收到错误消息 Role has encountered an error and has stopped. Application startup task failed with exit code 5100

如何使用更新的 Azure OS 系列安装 Visual C++ 2010 可再发行包作为 Azure 云服务部署的一部分?

它失败了,因为 Azure 云服务映像 已经安装了更多 up-to-date 版本 的 Visual C++ 可再发行组件包,所以我不需要安装另一个.让我误以为我确实需要它的是我使用的 DLL 未能加载其依赖项(如下面 Dependency Walker 的屏幕截图所示)。但是未能找到依赖项并不是因为缺少 Visual C++ 可再发行组件包,而是因为我引用的是调试版本(例如 MSVCP120D.DLL 而不是 MSVCP120.DLL)。切换到 'release' 为我解决了缺少依赖项的问题,不需要任何 Azure 部署 start-up 任务。