我的服务结构应用程序(所有.net核心2.1应用程序)由14个服务组成。在我的VSTS构建中的包处理之后,我注意到每个服务大约100mb,每个服务总共给出1.4GB(ish)。
这样做的结果是,在复制包文件时,需要很长时间! “将应用程序复制到映像存储......”发布阶段大约需要10分钟。
看看这个包它似乎包含.net核心2.1框架程序集,我猜这就是为什么每个服务包都这么大。
包过程是否必须包含.net核心2.1框架组件?有没有办法在没有.net核心框架的情况下打包它,如果我有办法在服务结构集群的所有虚拟机上安装.net框架,并保持该框架是最新的?
请参阅此repo,了解如何跳过包括运行时作为程序包的一部分。我们在应用程序中使用了一种非常类似的方法,包括32个.Net Core 2.0服务,它将我们的包大小从大约2.5 GB减少到大约600 MB。
但这意味着我们需要在每个SF节点上手动安装运行时(.Net Core和ASP.Net Core)。如果有人知道如何自动化该部分,我也对此非常感兴趣。
我们遇到类似的情况,在尝试将程序包上传到映像存储时,部署Service Fabric应用程序时会出现许多微服务。
对于.net core 2.2,您可以部署framework dependent executable (FDE),从输出文件夹中删除.net运行时。它完全符合.net完整框架可执行文件的工作方式。 TL;DR;
做以下事情:
<SelfContained>True</SelfContained>
(或者如果你通过dotnet publish
发布,请使用--self-contained false
标志其他优化是将目标清单文件用于依赖项。阅读更多关于runtime package store文档的信息。 这可用于从您的服务中删除SwashBuckle(10 MB)依赖项,并将其部署在目标环境中。
对于Service Fabric Actor项目,正如@ morten-fischer-madsen在上述评论之一中所建议的那样,您需要:
<UpdateServiceFabricManifestEnabled>False</UpdateServiceFabricManifestEnabled>
或删除它,否则构建将因Microsoft.ServiceFabric.Actors
nuget失败,例如The command "dotnet "obj\\FabActUtilTemp\FabActUtil.dll" /spp:"PackageRoot" /t:manifest /sp:"Actor1" /in:"bin\Debug\netcoreapp2.2\win7-x64\\Actor1.dll" /arp:"C:\Users\%username%\source\repos\Application1\Actor1\bin\Debug\netcoreapp2.2\win7-x64\\" " exited with code -2147450745.
Actor1
C:\Users\%username%\.nuget\packages\microsoft.servicefabric.actors\3.3.654\build\netcoreapp2.0\Microsoft.ServiceFabric.Actors.targets
22
我为这个here打开了一个bug