深入浅出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
相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
_Jonas2 天前
.net framework开发环境正式环境配置文件的切换
.net·wpf
Y3815326623 天前
C# 调用谷歌搜索 API:HttpClient 与 System.Text.Json 实战
搜索引擎·.net
qq_410194294 天前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
唐青枫5 天前
别急着拆服务:C#.NET 微服务架构从边界设计到实战
c#·.net
唐青枫6 天前
别把 Razor 当成几段 HTML:C#.NET Razor Pages、MVC 视图与实战详解
c#·.net
宝桥南山7 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Lost of 程序猿7 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
慧都小妮子7 天前
Word/Excel/PPT 如何稳定导出 Markdown?文档 SDK 三线能力拆解
.net·markdown·知识库·aspose·rag·文档转换·文档互操作
唐青枫7 天前
对象到底住在哪里?C#.NET 托管堆从分配、GC 到内存排查
c#·.net