首页 > 其他分享 >.NET发布时选择【独立部署模式】引发的故事

.NET发布时选择【独立部署模式】引发的故事

时间:2024-08-06 11:50:27浏览次数:6  
标签:文件 部署 引发 应用程序 dll 发布 linux NET DLL

目录

 


故事:

  • 用vs2019发布.net core3.1项目时选择了独立部署模式,
  • 突然很好奇想扒一扒在不依赖框架的情况下程序是怎么运行的?
  • 进而又想到在Linux下程序是不能直接调用DLL文件的,.net core发布后的项目在Linux下又是怎么运行的?
  • 最后更想去了解.net core发布在Linux系统运行的文件与发布在Windows系统的文件有什么不同,是怎么做到的一套代码,到处运行的?

参考:

.netcore在linux下使用P/invoke方式调用linux动态库

.NET Core跨平台的奥秘[下篇]:全新的布局 

ASP.NET Core跨平台 技术内幕

 

测试项目:控制台应用程序

回到顶部

win-x64发布

发布时选择

部署模式:独立

目标运行时:win-x86

 

 

发布后文件

文件类型:

  • Json文件
  • exe文件
  • DM文件
  • pdb文件
  • DLL文件

 

从大到小排序,发现几个重要的文件:

  • System.Private.CoreLib.dll:基础类库
  • coreclr.dll:公用语言运行时 
  • clrjit.dll:实时编译器
  • 自己编码以及引用到的DLL文件
  • ???使用反编译工具发现System.Private.CoreLib.dll里面居然包含了各种dll?然后coreclr.dll里面居然是没有dll文件,只有dos头、文件头、可选头、节#,与我想象的相反啊,难道coreclr.dll只是一个中间引用,核心的都在System.Private.CoreLib.dll中?

 

Runtime文件:

 

CLR文件:

应用程序是怎么运行的

参考:c#原理:c#代码是怎么运行的、实例化时发生了什么、静态对象(类、方法、变量、属性)的原理

DLL/EXE=>CLR/JIT=>机器码

双击:ConsoleApp1.exe

回到顶部

linux-x64发布

发布时选择

 

发布后文件

文件类型:黑色的是win-x86发布有的文件类型,红色的是win-x86发布没有的文件类型

  • Json文件
  • DM文件
  • PDB文件
  • DLL文件
  • 没有exe应用程序,,linux系统不支持exe程序,系统不一样
  • .a文件:LINUX系统中的静态链接库文件
  • SO文件:是Linux下的程序bai函数库,即编译好的可以供其他程序使用的代码和数据,类似于(又不仅仅)windows下的DLL文件
  • 没扩展名的文件,linux也是可以启动的,因为linux应用程序没有固定的扩展名,只要是支持的都能启动
    • 在linux上,这个没有扩展名的ConsoleApp1就是程序的入口

应用程序是怎么运行的

先安装icu库:yum  install  icu

然后程序授权:chmod 777 ./ConsoleApp1

最后运行程序:./ConsoleApp1

 

ConsoleApp1程序会通过.so文件调用对应的.dll文件 

 

标签:文件,部署,引发,应用程序,dll,发布,linux,NET,DLL
From: https://www.cnblogs.com/cuihongyu3503319/p/18344877

相关文章

  • .NET6 独立模式部署应用程序(无需客户机安装指定版本.NET运行时)
    下图对于.NET开发人员一定不陌生,尤其是CS架构,客户电脑要运行基于.NET开发的程序,无论是使用C#,还是VB.NET、F#,发布后的程序的运行环境都需要有相应版本的.NET的运行时,否则应用程序将无法正常运行。BS架构下,在服务器上安装指定版本.NET运行时,工作量可以忽略不计。试想,如果是CS架构......
  • 不安装运行时运行.NET程序
    好久没写文章了,有些同学问我公众号是不是废了?其实并没有。其实想写的东西很多很多,主要是最近公司比较忙,以及一些其他个人原因没有时间来更新文章。这几天抽空写了一点点东西,证明公众号还活着。长久以来的认知,对于托管代码.NET/JAVA,都是需要在服务器上安装SDK或者运行时......
  • 五、.Net Core Web Api连接MongoDB自动创建表格并实现CRUD功能
    五、.NetCoreWebApi连接MongoDB自动创建表格并实现CRUD功能1.注册MongoDB账号,并获取ConnectionString;MongoDB官网:MongoDB:TheDeveloperDataPlatform|MongoDB获取ConnectionString教程:ConnectionString获取在VSCodeforMac按下shift+command+p搜索Nuget......
  • 面试题 .NET Core 开发工程师
    在面试.NETCore高级开发工程师时,通常会涉及多个方面的问题,以评估候选人在不同领域的深度和广度。以下是一些常见的面试题目分类及示例问题:###基础知识1.**.NETCore与.NETFramework的区别?**-请解释.NETCore和.NETFramework的主要区别,以及在什么情况下选择使用......
  • .NET 开源权限认证项目 MiniAuth上线
    前言在Web应用项目中权限认证是个绕不开的话题,传统方法复杂又耗时。MiniAuth推出专为.NET开发者设计的简单、实用的权限认证项目。MiniAuth,作为ASP.NETCore的插件,让我们快速轻松实现用户登录、权限检查等功能。它支持多种认证方式,如JWT、Cookie,且易于集成到现有项目中。无论是......
  • 抖音短视频矩阵系统源码部署/技术应用开发(流程全解析)
     应用场景:抖音矩阵系统源码开发搭建/短视频矩阵号系统源码开发搭建/ 抖音seo矩阵系统源码开发搭建等。抖音短视频矩阵系统源码开发对服务商有哪些要求?企业在选择服务商时,无论是考虑自用还是考虑加盟服务商,都要考评服务商是否有相关开发资质,能力证明等,除此之外,功能的......
  • Gartner 魔力象限:单一供应商安全访问服务边缘 2024,Palo Alto Networks 再次荣膺领导者
    GartnerMagicQuadrantforSingle-VendorSASE2024Gartner魔力象限:单一供应商安全访问服务边缘2024请访问原文链接:https://sysin.org/blog/gartner-magic-quadrant-single-vendor-sase-2024/,查看最新版。原创作品,转载请保留出处。Gartner魔力象限:单一供应商SASE2024Pu......
  • 1、.Net UI框架:Xamarin Forms - .Net宣传系列文章
    Xamarin.Forms是一个跨平台移动应用开发框架,它允许开发者使用C#和.NET进行一次编码,然后在iOS、Android、macOS和Windows等多个平台上运行。Xamarin.Forms是Xamarin的一部分,而Xamarin是微软的.NET跨平台开发工具集,它提供了一套API,可以在不同的设备上创建本地UI。Xama......
  • kubernetes面试
    前言  此面经为企鹅侠自己面试遇到和收集其它朋友提供的信息整理而成,给予大家参考,希望能有所帮助。!!!文档有问题请大家及时指出做修改哈k8s是什么?请说出你的了解?  答:Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的......
  • .netCore System.Drawing.Common 发布,在CentOS 运行报错
    centos下要运行 System.Drawing.Common,需要先安装mono的  libgdiplus插件才可以。安装后,还报以下错误的,才是下文的内容。 报错:System.PlatformNotSupportedException:System.Drawing.Commonisnotsupportedonnon-Windowsplatforms.Seehttps://aka.ms/systemdra......