深入浅出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
相关推荐
慧都小妮子4 小时前
Aspose.CAD for .NET 26.6 更新发布
pdf·.net·3d渲染·cad·pdf导出·ifc编辑
夜莺悠吟9 小时前
关于对 C# 中 ImplicitUsings,GlobalUsings 的讨论
c#·.net
fen_fen1 天前
麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)
linux·服务器·.net
yuyuyui2 天前
.NET CORE 授权进阶-角色、策略与动态权限实现
认证·.net core·授权·动态权限
黑洞视界3 天前
高性能进程内队列 BufferQueue 1.0 版本发布
.net
fogota3 天前
【AI】C# .NET8 WPF 第三方DLL引用配置(编译不丢失、不自动删除)
c#·.net·wpf·dll