当前位置: 首页 > article >正文

c# 文件编译的过程

两次编译的过程整个流程的核心思路是.NET 用两次编译把写代码和跑代码这两件事解耦开来。第一次编译源码 → IL开发时完成你写的 C# 代码.cs文件通过csc.exe编译器翻译成一种叫做IL中间语言Intermediate Language的中间产物最终打包成.exe或.dll文件。这一步在你的开发机上完成IL 不是机器码任何 CPU 都还不能直接执行它。VB.NET、F# 等语言也有自己的编译器但最终都会生成同一种 IL这就是 .NET 能做到跨语言互调的根本原因。第二次编译IL → 机器码运行时完成当用户在自己的机器上运行这个.exe时CLR公共语言运行时启动其中的JITJust-In-Time即时编译器读取 IL根据当前机器的 CPU 架构即时翻译成真正的机器码x86 / x64 / ARM 等然后交给操作系统执行。为什么要这样设计这个设计带来了两个核心好处一是跨平台同一份.dll文件可以在 Windows/Linux/macOS 上运行由各平台的 CLR 负责翻译成对应机器码二是跨语言C# 和 VB.NET 可以互相调用对方的库因为底层都是同一种 IL。托管代码 vs 非托管代码的区别以及 CLR 到底帮你管了哪些事。核心区别有没有人管你非托管代码如 C写的程序编译出来直接就是 CPU 机器指令操作系统拿到就跑。好处是快、直接坏处是所有事情都要程序员自己负责——内存要自己申请自己释放忘了就内存泄漏越界访问就直接崩溃没有任何保护。托管代码C# 就是这类写的程序产物是 IL 中间语言必须交给 CLR 来代为管理CLR 再翻译成机器码给操作系统执行。多了这一层CLR 就能替你做很多事CLR 替你管的六件事JIT 编译把 IL 实时翻译成当前机器的机器码上一篇讲的第二次编译就在这里发生内存管理你用new创建对象CLR 自动在堆上给你分配空间不用手动malloc垃圾清理GC你不再用的对象GC 会自动回收内存彻底告别内存泄漏异常处理程序出错时有统一的try/catch机制兜底不会直接崩给用户看类加载器程序集dll按需加载用到哪个加载哪个不用手动管理反射程序运行时可以动态查询这个类有哪些方法、属性WPF 的数据绑定底层就大量依赖反射对学 C# 的你意味着什么你写的每一行 C# 代码都是托管代码受 CLR 保护。这意味着你几乎不需要关心内存管理不会因为忘记释放内存而崩溃异常会被妥善捕获。代价是相比 C 有一点点性能开销但对于桌面应用WPF来说完全可以忽略不计。CLR CTS CLS三者是层层包含的关系从大到小CLR ⊃ CTS ⊃ CLS。CLR公共语言运行时是最大的那层是整个 .NET 的运行环境就像前两张图讲的虚拟机。它负责 JIT 编译、垃圾回收、异常处理等所有运行时工作。CTS 和 CLS 都是 CLR 的组成部分。CTS通用类型系统住在 CLR 里面它回答的问题是不同语言C#、VB.NET、F#之间类型怎么统一 CTS 规定了 .NET 平台上所有合法类型的定义规则比如什么是类、什么是结构体、什么是接口、值类型和引用类型怎么区分。有了 CTSC# 的int和 VB.NET 的Integer才能被认定为同一个底层类型System.Int32两种语言的代码才能互相传递数据。CLS公共语言规范是 CTS 的一个子集是更小的那一层。它回答的是如果我想写一个库让所有 .NET 语言都能调用我必须遵守哪些规则 CLS 是各语言之间的最小公约数。举个例子C# 支持无符号整数uint但 VB.NET 不支持所以uint不在 CLS 里。你写的公共库如果用了uint作为公开接口VB.NET 的用户就无法使用它。用一句话概括三者的分工CLR 负责跑程序CTS 负责统一类型CLS 负责跨语言互通。对你学 C# 和 WPF 而言实际编码时不需要刻意操作这三者但理解它们能帮你看懂很多为什么 .NET 这样设计的问题。

相关文章:

c# 文件编译的过程

两次编译的过程:整个流程的核心思路是:.NET 用两次编译把"写代码"和"跑代码"这两件事解耦开来。第一次编译:源码 → IL(开发时完成)你写的 C# 代码(.cs 文件)通过 csc.exe …...

进阶与总结:成为核心贡献者的路径、开源伦理与专栏知识体系复盘

进阶与总结:成为核心贡献者的路径、开源伦理与专栏知识体系复盘 从一次深夜提交被拒说起 上周三凌晨两点,我给一个嵌入式RTOS项目提交了优化中断延迟的补丁。邮件列表三小时后回复:“代码逻辑没问题,但破坏了ARM Cortex-M3的上下文对齐约定,请重新阅读porting guide第4.…...

3分钟解锁纯净音乐:免费实现Spotify广告拦截的完整指南

3分钟解锁纯净音乐:免费实现Spotify广告拦截的完整指南 【免费下载链接】BlockTheSpot Video, audio & banner adblock/skip for Spotify 项目地址: https://gitcode.com/gh_mirrors/bl/BlockTheSpot 你是否厌倦了在享受音乐时被突如其来的广告打断&…...

提交艺术:编写规范的Commit Message与创建高质量的Pull Request

提交艺术:编写规范的Commit Message与创建高质量的Pull Request 从一次痛苦的代码回溯说起 上周排查一个线上闪退问题,git log 拉出来一看,满屏的“fix bug”“update”“优化代码”这类提交信息。为了定位引入问题的变更,我们不得不逐个点开提交看diff,花了近两个小时才…...

协作与迭代:当Code Review意见砸过来,CI流水线又红了

协作与迭代:当Code Review意见砸过来,CI流水线又红了 上周三深夜,我在仓库里提交了一段SPI驱动优化代码。自觉逻辑清晰,性能提升明显,满心等着合入。第二天一早,企业微信弹出三条Code Review通知,紧接着CI流水线标红——一个隐蔽的时序bug在QEMU仿真里被逮了出来。这场…...

OpenWrt上Asterisk依赖包全解析:解决SIP通话无声问题的完整配置清单

OpenWrt上Asterisk依赖包全解析:解决SIP通话无声问题的完整配置清单 在家庭或小型办公室环境中搭建内网VOIP系统时,OpenWrt与Asterisk的组合堪称黄金搭档。但许多开发者在编译安装过程中常被依赖包缺失和SIP通话无声问题困扰。本文将深入剖析这些技术难题…...

LoFTR:当Transformer遇见无检测器特征匹配——从全局感受野到像素级对齐的革新之路

1. LoFTR算法为何掀起特征匹配革命? 第一次接触LoFTR是在处理一组室内装修效果图匹配时,当时用传统方法在纯色墙面区域死活得不到理想结果。直到尝试了这个基于Transformer的方案,才明白无检测器设计为何被称为特征匹配领域的"范式转移&…...

CODESYS定时器进阶:从标准功能到高效自定义应用

1. IEC标准定时器深度解析 在工业自动化领域,定时器就像是我们日常生活中的闹钟,只不过它控制的不是起床时间,而是各种设备的启停顺序。CODESYS作为主流的PLC编程环境,提供了三种符合IEC61131-3标准的定时器功能块,它们…...

Delphi XE跨平台开发实战:Linux服务端应用构建指南

1. 为什么选择Delphi XE开发Linux服务端应用 作为一个在Windows平台深耕多年的Delphi开发者,当我第一次听说Delphi XE支持Linux开发时,内心是充满怀疑的。毕竟Linux开发环境向来以命令行和开源工具链著称,而Delphi给我的印象一直是可视化开发…...

2026届毕业生推荐的五大AI写作网站实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使AIGC(人工智能生成内容)检测率得以降低的关键核心之所在&#xff0…...

SDMatte效果对比:与传统方法及在线工具的精度与速度测评

SDMatte效果对比:与传统方法及在线工具的精度与速度测评 1. 开篇:抠图技术的革新时刻 抠图技术正经历一场革命性变革。传统方法要么耗时费力,要么效果欠佳,而新兴的AI解决方案正在改写游戏规则。SDMatte作为开源模型代表&#x…...

像素时装锻造坊实战:VMware环境配置与Anything-v5模型快速上手指南

像素时装锻造坊实战:VMware环境配置与Anything-v5模型快速上手指南 1. 为什么选择VMware部署像素时装锻造坊 当你第一次看到像素时装锻造坊的界面时,可能会被它独特的日系RPG风格吸引。这款基于Stable Diffusion和Anything-v5模型的图像生成工具&#…...

2026奇点大会闭门报告流出:CoT在金融风控场景的思维断裂点图谱(附3类高危链式漏洞修复模板)

第一章:2026奇点智能技术大会:大模型思维链CoT 2026奇点智能技术大会(https://ml-summit.org) CoT如何重塑大模型的推理能力 思维链(Chain-of-Thought, CoT)已从提示工程技巧演进为大模型原生推理范式。在2026奇点大会上&#x…...

Qwen3-Reranker-0.6B入门指南:理解cross-encoder架构与Qwen3改进点

Qwen3-Reranker-0.6B入门指南:理解cross-encoder架构与Qwen3改进点 你是不是经常遇到这样的问题:用向量搜索找到了一堆相关文档,但排在最前面的结果,好像总是差那么点意思?或者,你的智能客服系统&#xff…...

为什么你的LoRA微调后反而更慢?大模型压缩链路断点诊断(量化→剪枝→蒸馏→编译四阶耦合失效分析)

第一章:大模型工程化中的模型压缩算法对比 2026奇点智能技术大会(https://ml-summit.org) 模型压缩是实现大语言模型在边缘设备、低延迟服务及成本敏感场景中落地的关键工程环节。不同压缩路径在精度保留、推理加速比、部署兼容性与训练资源消耗上呈现显著差异&…...

深夜告警炸裂?这份Linux故障排查“作战地图”请收好曰

先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf僬

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

基于遗传算法优化的BP神经网络多输入双输出预测模型技术说明

matlab的基于遗传算法优化bp神经网络多输入多输出预测模型,有代码和EXCEL数据参考,精度还可以,直接运行即可,换数据OK。 这个程序是一个基于遗传算法优化的BP神经网络多输入两输出模型。下面我将对程序进行详细分析。 首先&#x…...

5个SRWE窗口分辨率控制技巧:突破游戏与应用限制的终极方案

5个SRWE窗口分辨率控制技巧:突破游戏与应用限制的终极方案 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE Simple Runtime Window Editor(SRWE)是一款革命性的窗口分辨率控制…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)邪

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

龙芯k - 走马观碑组VLLX驱动移植系

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

VMware虚拟机版本兼容性问题:手动修改vmx和vmdk文件实战指南

1. 虚拟机版本兼容性问题解析 第一次遇到VMware虚拟机打不开的报错时,我整个人都懵了。明明昨天还能正常使用的虚拟机,今天突然提示"此虚拟机是由较新版本的VMware创建的",这种场景相信很多开发者都遇到过。问题的本质在于高版本VM…...

EcomGPT-中英文-7B电商模型Java八股文实践:面试常见AI集成场景设计与实现

EcomGPT-中英文-7B电商模型Java八股文实践:面试常见AI集成场景设计与实现 最近几年,面试里问“系统设计”的越来越多了,尤其是涉及到AI怎么用。很多朋友背熟了微服务、Redis、消息队列这些八股文,但一被问到“怎么把一个大模型塞…...

YOLO26涨点改进| TMM 2026顶刊 |独家创新首发、特征融合改进篇| 引入CGMM跨模态全局建模模块,通过特征在空间与通道层面实现深度融合,助力小目标检测,图像分割,多模态目标检测有效涨点

一、本文介绍 🔥本文给大家介绍使用 CGMM跨模态全局建模模块 改进YOLO26网络模型,通过跨模态全局建模机制对不同来源的特征进行更充分的对齐与交互,使模型能够在特征融合阶段同时建模空间维度和通道维度的全局上下文信息,从而缓解不同模态或不同层级特征之间的不一致问题…...

避坑指南:HuggingFace Hub国内镜像设置常见错误及解决方案

HuggingFace Hub国内镜像配置实战:从原理到避坑全解析 第一次在团队协作项目中使用HuggingFace Hub时,我花了整整两天时间才让所有成员的开发环境正常加载BERT模型。有的同事在Windows上遇到证书错误,有人用conda虚拟环境却始终连接超时&…...

推荐四款Windows电脑神器,全是小而专软件!

聊一聊对于电脑更深层次的设置,我们也不会。也希望设置软件的人,不要设计的太复杂。主要是复杂的我们也搞不懂。我们需要的就是能简单点击几次。就能达到想要的效果。今天给大家分享几款实用的小工具。只要点几下,就能达到软件描述的效果。软…...

推荐一款老师喜欢的强大工具:支持Win、鸿合、希沃大屏,非常实用!

聊一聊又是一年开学季。开学了发一些应时期的小软件。今天给大家分享一款学校班级课程表工具。这款工具可以投放在学校电子大屏上。支持学校的白板软件。软件介绍学校班级课程表工具界面清爽,信息能一目了然。虽然看感觉功能简单,但每个模板都可以进行设…...

面试必备:如何清晰解释Transformer中Encoder和Decoder的交互?附示例代码

面试必备:深入解析Transformer中Encoder与Decoder的交互机制 在自然语言处理领域,Transformer架构已经成为处理序列到序列任务的黄金标准。无论是机器翻译、文本摘要还是对话生成,理解Encoder和Decoder之间的交互机制都是技术面试中的高频考点…...

【ZYNQ】从PL到PS:解锁ZYNQ中DDR3存储器的双核协同访问策略

1. ZYNQ架构中的DDR3存储器基础认知 ZYNQ系列器件最吸引人的特点就是它把FPGA(PL)和ARM处理器(PS)集成在同一个芯片上。这种架构让开发者既能享受FPGA的并行计算能力,又能利用ARM处理器的灵活编程特性。但真正让两者协…...

基于Docker的达梦数据库快速部署指南

1. 为什么选择Docker部署达梦数据库 第一次接触达梦数据库时,我像大多数开发者一样选择了传统安装方式。结果花了大半天时间处理依赖库冲突,最后还因为系统环境问题导致安装失败。后来尝试用Docker部署,整个过程只用了15分钟——这就是容器化…...