将DotNet Core Application复制到Service Fabric中的图像存储需要很长时间

问题描述 投票:2回答:2

我的服务结构应用程序(所有.net核心2.1应用程序)由14个服务组成。在我的VSTS构建中的包处理之后,我注意到每个服务大约100mb,每个服务总共给出1.4GB(ish)。

这样做的结果是,在复制包文件时,需要很长时间! “将应用程序复制到映像存储......”发布阶段大约需要10分钟。

看看这个包它似乎包含.net核心2.1框架程序集,我猜这就是为什么每个服务包都这么大。

包过程是否必须包含.net核心2.1框架组件?有没有办法在没有.net核心框架的情况下打包它,如果我有办法在服务结构集群的所有虚拟机上安装.net框架,并保持该框架是最新的?

.net-core azure-service-fabric azure-pipelines-release-pipeline
2个回答
2
投票

请参阅此repo,了解如何跳过包括运行时作为程序包的一部分。我们在应用程序中使用了一种非常类似的方法,包括32个.Net Core 2.0服务,它将我们的包大小从大约2.5 GB减少到大约600 MB。

但这意味着我们需要在每个SF节点上手动安装运行时(.Net Core和ASP.Net Core)。如果有人知道如何自动化该部分,我也对此非常感兴趣。


2
投票

我们遇到类似的情况,在尝试将程序包上传到映像存储时,部署Service Fabric应用程序时会出现许多微服务。

对于.net core 2.2,您可以部署framework dependent executable (FDE),从输出文件夹中删除.net运行时。它完全符合.net完整框架可执行文件的工作方式。 TL;DR;做以下事情:

  • 在csproj中添加<SelfContained>True</SelfContained>(或者如果你通过dotnet publish发布,请使用--self-contained false标志

其他优化是将目标清单文件用于依赖项。阅读更多关于runtime package store文档的信息。 这可用于从您的服务中删除SwashBuckle(10 MB)依赖项,并将其部署在目标环境中。

对于Service Fabric Actor项目,正如@ morten-fischer-madsen在上述评论之一中所建议的那样,您需要:

  • 在csproj中设置<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

© www.soinside.com 2019 - 2024. All rights reserved.