网站内容编辑器,做淘宝客网站需要做后台吗,简述网站内容管理流程,如何建设网站论文文献一#xff0c;.NET Core 自宿主应用程序个头有点大
发布.NET Core应用程序有两个方式#xff0c;一种是“便携式”#xff0c;一种是“自宿主式”。便携式发布时#xff0c;目标程序不带.net core运行环境#xff0c;所以“个头”很小#xff0c;可能只有几十K几百K字节…一.NET Core 自宿主应用程序个头有点大
发布.NET Core应用程序有两个方式一种是“便携式”一种是“自宿主式”。便携式发布时目标程序不带.net core运行环境所以“个头”很小可能只有几十K几百K字节但是它需要用户的目标系统上安装.NET CORE 框架自宿主式发布出来的程序自带运行时和框架类库自成一体不需要客户机安装.NET CORE环境部署简单方便。
看看一个简单的“Hello World!” 控制台程序有多大 修改 csproj文件添加目标系统 用 dotnet publish -r:linux-x64 针对linux平台发布得到目标文件夹现在看看大小 这个Hello World 控制台程序的目标文件总大小达到了62.2 MB
二为什么.net core自宿主程序这么大
原因有二一是为了能在目标系统上 “独立” 运行自宿主程序必须自带运行时这无可厚非二是不管是用 dotnet publish命令行发布还是用VS发布它们都会不分青红皂白地把.net core类库整个发布到目标程序中这正是使目标程序变大变肥的主要原因。
下面是发布后的部分文件列表可以看出很多的dll与这个hello world 程序毫无关系 三给 Linux .Net Core 自宿主应用程序瘦身
为什么要给“自宿主”程序瘦身原因是既然发布“自宿主”程序而不是便携式程序一般都是程序作者或厂商希望产品能有更好的独立性更看重程序本身的完整和纯净不喜欢附带一些乱七八糟的东西。另外程度体积小一些能更方便地在卡片机如树莓派、小型专用设备这类存贮空间不太富裕的设备上部署在Docker中部署也能大大减小映像的大小在同样的空间中运行更多的服务。
从前边的分析可以看出自宿主应用程序之所有“肥大”是因为有太多的无关的类库或Native so库造成的只要清理掉它们瘦身的目标就达到了。
1将发布的程序全部上传到Linux系统的某个文件夹然后运行 chmod x coretest给coretest赋与可执行权限。我写的这个hello word程序名叫“coretest”。 2用 ./coretest 把程序运行起来 不要按键让程序不要退出。
3查出这个进程的PID
再加一个终端用 ps -ef | grep coretest 查出这个进程的PID号 4列出进程关联文件
用 sudo lsof -p PID号列出指定进程调用/引用的文件从列表中找出属于这个core程序依赖的类库和core Navite函数库
特点路径都指向这个core程序所在的文件夹。
下图是列表的一部分 从列表中可以看出本 coretest 程序相关的文件有如下三类14个文件
1coretes加载程序和程序集
coretestcoretest.dll
2依赖的.net 框架程序集
System.Runtime.dllSystem.Console.dllSystem.Threading.dllSystem.Runtime.Extensions.dllSystem.Collections.dll
3运行时函数库
libclrjit.solibcoreclr.solibhostpolicy.solibhostfxr.soSystem.Native.soSystem.Globalization.Native.soSystem.Private.CoreLib.dll
5修改依赖文件 coretest.deps.json对依赖行配置文件瘦身
打开 coretest.deps.json文件你会发现所有的依赖库都在其中重要的是49行开始的“runtime.linux-x64.Microsoft.NETCore.App/2.0.0”的runtimes和native两个节点共有173个依赖项与我们测试出来的14个依赖整整多了近160个依赖项这些多余的都可以删除 删除后deps.json一下子清爽了 6测试依赖配置文件是否正确
再次用 ./coretest 运行本程序检查依赖项是否正确。当按任意键退出程序时出现了下边的错误。 原来在Console.ReadKey返回时会调用另一个dll而之前用lsof时读取依赖时程序没有执行到这一步所以没有看到有这个依赖这个依赖被误删了。所以得重新加到deps.json文件中。 再次测试程序已经完全正常。
7根据瘦身后的依赖关系删除无关文件
要点需要保留依赖列表文件coretest.deps.json和运行时配置文件coretest.runtimeconfig.json。
8再次测试程序运行情况
运行 ./coretest发现出了一个问题 原来还差一个native 函数库怎么办简单从windows发布目录中上传到Linux的这个程序文件夹中。
再次运行一帆风顺瘦身工作正式完成 现在看看这个程序共计还有多少文件 哈哈现在只有19个文件比如之前的近180个文件这个”身“瘦得厉害吧简直是一身清爽呀
瘦身后这个程序所有文件从62.2M变成了24.3m打包压缩后只有8.62M。
附记
有的朋友可能会说还是有点大呀一个hello world就有19个文件24m大小如果我司开发一个功能完整的商业应用会不会大得吓人其实我可以告诉你
一这19个文件已经具备了.net core的关键功能你开发更大的商业应用不外乎再多引用了几个dll而已能再大多少
二这个程序是自带了运行环境的它自成一体独立运行不需要麻烦你和你的客户或运维人员在linux上安装安装一大堆东西配置一大堆东西
三正因为这个程序可以独立运行那么如果放在Docker中对docker镜像的体积影响可以忽略你们镜像文件不会因为需要安装什么工作环境而增大数百M的体积。
原文地址http://www.cnblogs.com/yunei/p/7436368.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注