深入浅出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
相关推荐
缺点内向20 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
2501_9307077821 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
向上的车轮1 天前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
波波0071 天前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
波波0072 天前
每日一题:中间件是如何工作的?
中间件·.net·面试题
无风听海2 天前
.NET 10之可空引用类型
数据结构·.net
码云数智-园园2 天前
基于 JSON 配置的 .NET 桌面应用自动更新实现指南
.net
无风听海2 天前
.NET 10 之dotnet run的功能
.net
岩屿2 天前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
码云数智-大飞2 天前
.NET 中高效实现 List 集合去重的多种方法详解
.net