我有一个标准的azure webrole,需要在云服务上安装一些第三方软件。 webrole本身非常基础。第三方软件有一些先决条件,因此所有内容都包含在角色的内容中(总共5个MSI文件),并通过提升的启动任务进行安装。
软件安装成功且一切正常,但包含这些MSI作为webrole的内容会产生80MB * .cspkg文件。
排除安装程序会产生10MB的程序包大小。所有5个MSI文件的总大小为20.5MB。我不明白为什么包含20MB的安装程序会产生80MB的云服务包。
我认为打包过程可能正在尝试压缩文件(无意中增加了有效负载)。我看到的正常吗?或者,如果包含安装程序,是否有任何方法可以减少生成的包?
答案 0 :(得分:3)
WebRoles的包通常比工作者角色更大,因为您的角色内容包含两次!一次是approot
文件夹,一次是sites\0\
文件夹。
作为你的第二个想法 - 压缩。这是真的。 Azure包只是一个常规的zip文件。您可以放心地将yourpackage.cspkg
重命名为yourpackage.zip
并浏览内容。
但是,将安装文件保存在包中的策略根本无效。我建议您将第三方安装程序放在blob存储中。然后先下载然后安装它。要下载内容,您可以使用各种技术。从PowerShell到Azure Bootstrapper,可能还有更多。
在Blob存储中安装(全部和任何一个)第三方安装程序是为Windows Azure设计应用程序的推荐最佳实践。
至于为什么您的Web应用程序在Azure部署程序包中被复制两次的问题 - 它的根源在于Windows Azure Web Role was using IIS Hostable Web Core and not full IIS。并且可能仍然存在向后兼容性。
答案 1 :(得分:0)
我发现,如果您将 msi 添加到不会多次复制的Azure项目的\ bin文件夹中,则使用以下样式:
https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-dotnet-install-dotnet
使用Visual Studio 2017,Azure SDK 2.9,Build Engine版本14.0.27530.0