深入浅出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
相关推荐
步步为营DotNet3 分钟前
.NET 可观测性选型:Metrics、ActivitySource、EventSource 到底该用哪个
c#·.net·metrics·可观测性
CSharp精选营43 分钟前
我把 Ant Design Blazor 翻了一遍:Blazor 中后台组件库到底能不能用
.net·blazor·ant design blazor·中后台系统·mudblazor
IT规划师1 小时前
Redis 数据类型全解 - ZSet:两个编码,七种玩法(五)
redis·.net
rockey62713 小时前
AScript之字符串模板
c#·.net·script·expression·动态脚本
玩泥巴的1 天前
源生成与 AOT 就绪的微信生态 .NET SDK:结构、能力边界与 API 定位方法
ai·微信·.net·agent·aot·roslyn
1-1=01 天前
C# 泛型
c#·.net·.netcore
有志冬瓜1 天前
.NET Framework全部版本离线下载安装教程
安全·.net·软件需求
IT规划师1 天前
Redis 数据类型全解 - Set 的三个真相:去重、标签、共同好友(四)
redis·.net
椒颜皮皮虾྅2 天前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda