深入浅出DOTNET技术原理

本文是对.NET核心技术原理部分的讨论分析,重点关注最新.NET CORE/5+框架,不对.NET FRAMEWORK做过多分析。

.NET CORE程序构成

一般化的.NET技术的构成,如下图:

.NET CORE同样遵循上述构成。.NET CORE由hostfxr / hostpolicy / coreclr协同拉起CLR.

  • 启动器: hostfxr

  • 运行时: coreclr

  • Assembies: 托管程序集,由System.,Microsoft.等开头dll构成,位于.NET CORE安装路径下。这部分也就是C#语言的标准库。

.NET CORE程序的几种编译模式

1. 默认的常规编译:

默认使用系统(路径下)安装好的.NET CORE及其运行时环境,编写的代码被编译进xxx.dll,而xxx.exe仅作为启动器(native host)。

若将程序部署到未安装.NET CORE环境的电脑上,则会因为缺.NET CORE运行环境而导致程序无法运行。

2. 自包含--self-contained:

该模式会将程序所需.NET运行时环境一并打包,System.开头的.NET CORE运行时库会被拷贝到bin/编译路径下。

在纯净系统下部署程序无需安装.NET CORE运行时。

3. 单文件PublishSingleFile

该模式会将程序代码及其依赖dll一并编译到exe中,所以exe文件较大。

.NET CORE/5+程序启动流程和运行原理

exe → hostfxr.dll → 读取.runtimeconfig.json → 加载coreclr.dll → 启动CLR → 读取.deps.json → 按deps规则加载程序集 → Main函数

  • .runtimeconfig.json文件的作用:决定exe程序使用哪个版本.NET Runtime来运行,即运行时选择与配置。
  • .deps.json文件的作用:用于指定需要加载哪些程序集作为程序运行的依赖。

dotnet常用命令行

bash 复制代码
# 创建解决方案
dotnet new sln -n MySolution
cd MySolution
# 命令创建WPF项目
dotnet new wpf -n MyWpfApp
# 创建控制台项目
dotnet new console -n MyConsoleApp
# 将项目添加到解决方案中
dotnet sln MySolution.sln add MyConsoleApp/MyConsoleApp.csproj
# 添加多个项目和引用
dotnet new classlib -n MyLibrary
dotnet sln MySolution.sln add MyLibrary/MyLibrary.csproj
dotnet add MyConsoleApp/MyConsoleApp.csproj reference MyLibrary/MyLibrary.csproj
# 查看已安装的创建项目模板
dotnet new --list
dotnet new --list | Select-String "Project"
# 安装nuget包
dotnet add package Serilog.Sinks.Console
相关推荐
Traced back2 小时前
# Windows窗体 + SQL Server 自动清理功能完整方案优化版
数据库·windows·.net
EdisonZhou3 小时前
MAF快速入门(13)常见智能体编排模式
llm·agent·.net core
今晚打老虎z7 小时前
必应壁纸接口
.net
Traced back13 小时前
Windows窗体应用 + SQL Server 自动清理功能方案:按数量与按日期双模式
数据库·windows·c#·.net
1314lay_100715 小时前
.Net 7.0 Core 文件导入接口的实现
visualstudio·c#·.net
贾修行15 小时前
Kestrel:.NET 的高性能 Web 服务器探秘
服务器·前端·kestrel·.net·net core·web-server·asp.net-core
聊聊MES那点事15 小时前
如何在FastReport.NET中自定义就绪报表查看器(Viewer)
.net·报表工具·fastreport
Cincoze-Johnny1 天前
Windows系统-应用问题全面剖析Ⅴ:德承工控机DA-1000在Windows操作系统下[安装.NET Framework]教程
.net
黑夜中的潜行者1 天前
构建高性能 WPF 大图浏览器:TiledViewer 技术解密
性能优化·c#·.net·wpf·图形渲染