.net 框架中托管执行环境具体是指什么
任何基于 .NET 框架编写的应用程序,.NET 框架将负责对其进行编译。源码毕节离兴义源码.NET 框架对应用程序源代码的源码编译过程分为二个阶段。而普通应用程序的源码编译一般来说只有一步。
在第一步的源码编译过程中,源代码编译会产生托管模块。源码托管模块包含在一个物理文件中。源码这个物理文件被称作可移植可执行 (PE,源码Portable Executable) 文件。源码此文件主要包含了“中间语言 (MSIL)”、源码“元数据类型”和一些资源文件。源码编译过程的第二步就是JIT 编译。公共语言运行时环境(CLR) 具有一个称为 JIT 编译的功能。当应用程序需要在某个系统上运行时,此功能可以将应用程序的 MSIL 代码翻译为该系统的机器语言。这样一来,假设在两个不同类型客户端上都有相同的 .NET应用程序。当它们运行的时候,.NET应用程序将会以各自客户端系统上的机器语言来运行。
元数据类型描述了托管模块内“中间语言 (MSIL)”的类型、成员以及其他引用,公共语言运行库在运行时将用到此信息。所以元数据和MSIL代码在托管模块内是紧密结合在一起的,要将两者分离是不可能的。
Microsoft 中间语言 (MSIL)包含许多通用操作的指令,包括创建和初始化对象、调用对象方法的指令。另外,它还包含用于算术和逻辑运算、流控制、直接内存访问和异常处理等指令。MSIL是php导航源码自适应一种比大部分的CPU机器语言更高级的语言。
MSIL语言是编译过程的第一步,无论是VB .NET代码还是C# .NET代码,在这里都是编译成为MSIL。所以,MSIL也是运行时环境(CLR)中所使用的通用语言。
编译过程中产生的“中间语言 (MSIL)”和“元数据类型”。在.NET 框架对应用程序进行编译的过程中,可以将许多的“中间语言 (MSIL)”和“元数据类型”合并到一个程序集中。
每个程序集合并了许多的“中间语言 (MSIL)”和“元数据类型”,达到统一管理和整合的目的。
同时程序集包含了称为清单的数据块。清单是一个表,表中的每一项是程序集组成部分的文件的名称。
公共语言运行库提供了两个测试和调试MSIL代码的工具:MSIL汇编程序(Ilasm.exe)和MSIL反汇编程序(Ildasm.exe)。测试和调试完MSIL代码之后,就可以通过(JIT)实时编译器编译成可直接执行的机器码。
.NET Framework应用程序在运行过程中,在对自身资源的创建、管理和回收这些方面都有其特点。本小节将为大家介绍应用程序域和垃圾回收的相关概念。
应用程序域机制可以让许多.NET Framework应用程序在运行过程中,有自己专属的资源区域,彼此之间不受影响。同时一旦发生错误也不会导致其他运行中的应用程序的崩溃。
垃圾回收机制可以在应用程序运行完毕后,自动释放和回收系统资源。取代了以往通过手工跟踪的过程,提高系统的整体效能。
1、什么是.Net?什么是C#?
在软件开发领域,.NET 和 C# 是两个重要的概念。.NET 是一个由微软推出的创新平台,用于构建各种应用程序,如 Windows 应用、Web 应用和 Web 服务等。今日头条源码查看它支持多种语言开发,包括 C#、C++、Visual Basic 等。.NET 由庞大的代码库组成,包括公共语言运行库(CLR)、类库、公共语言规范、通用类型系统、元数据和组件等。
C# 则是一个微软开发的面向对象编程语言,与.NET 深度绑定。它基于 C 和 C++,为通用语言基础结构(CLI)设计,允许在不同平台和架构上使用各种高级语言。C# 程序通过编译为托管代码(CIL,中间语言)存储在程序集中,在 CLR 下运行。CLR 是 Microsoft 对 CLI 国际标准的实现,提供实时(JIT)编译、异常处理、垃圾回收和资源管理等服务。
.NET Framework 是早期的 .NET 平台版本,与 Windows 操作系统深度绑定,不支持跨平台。然而,随着 web 技术、移动技术和云计算的流行,.NET Framework 的局限性逐渐显现。因此,微软重构并推出了 .NET Core,旨在实现真正的跨平台支持。.NET Core 从 .NET Framework 中提炼出核心部分,并删除了不再被认为是核心的部分。随着版本的基于servlet网站源码下载更新,.NET Core 已经演进到 .NET,仍然受到微软的关注和更新。
总结来说,C# 是用于编写 .NET 应用程序的编程语言,而 .NET 则是一个创新平台,提供构建各种应用程序所需的开发环境和代码库。通过 C# 编写的源代码被编译成 CLI 规范的中间语言(IL),存储在程序集中,然后在 CLR 下执行,提供实时编译、垃圾回收等服务。.NET 和 C# 在软件开发中扮演着核心角色,共同推动着应用开发的进程。
在ASP.NET中源程序代码先被生成“中间语言”(IL或MSIL),然后再进行编译,这种机制的目的是( )。
答案:B
本题考查.NET运行机制。
符合CLS规范将源代码编译成CLR所识别的“中间语言”和“元数据”。通过这样的机制,.NET框架具有了支持几乎所有语言操作的特性,只要该语言实现了将源代码编译成“中间语言”(IL或MSIL),都可以用于.NET平台的开发。
在ASP.NET中源程序代码先被生成中间代码(IL或MSIL),然后再转变成各个CPU需要的代码,实现源程序跨平台。
综合分析,本题选B。
深入理解.NET图书目录
深入理解.NET图书目录 Part I: CLR基础知识1. CLR执行模型
- 将源代码编译为托管模块
- 将托管模块组合成程序集
- 加载Common Language Runtime
- 执行程序集代码
- IL和验证
- 不安全代码与NGen.exe工具
- .NET框架类库介绍
- 公共类型系统与共同语言规范
- 与未管理代码的互操作性
2. 应用程序构建、部署与管理
- .NET框架部署目标
- 将类型构建为模块
- 使用响应文件
- 元数据简介
- 将模块组合成程序集
- 使用Visual Studio IDE添加程序集到项目
- 使用Assembly Linker
- 向程序集中添加资源文件
- 版本信息和文化设置
- 简单部署与行政管理
3. 共享程序集与强命名程序集
- 两种类型的程序集与部署方法
- 给程序集分配强名称
- 全局程序集缓存(GAC)结构
- 引用强命名程序集的程序集设计
- 强命名程序集的防篡改性
- 私密部署强命名程序集
- 运行时如何解析类型引用
- 高级行政管理控制
Part II: 操作类型4. 类型基础
- 所有类型都继承自System.Object
- 类型之间的转换
- C#中is和as操作符的使用
- 命名空间和程序集的关系
- 运行时类型关系
5. 原始、引用与值类型
- 编程语言基本类型
- 检查和无检查原始类型操作
- 引用类型与值类型
- 值类型装箱与拆箱
- 接口使用值类型字段的注意事项
Part III: 类型设计6. 类型与成员基础
- 类型成员种类
- 访问级别与朋友程序集
- 成员访问性
- 静态类与部分类、结构和接口
7. 常量和字段
- 常量
- 字段
8. 方法:构造函数、运算符、转换和参数
- 实例构造函数与类(引用类型)
- 结构体实例构造函数(值类型)
- 类型构造函数
- 类型构造函数性能
- 运算符方法
- 语言互操作性与运算符
- 转换运算符方法
- 参数传递
扩展资料
《深入理解。NET》是。NET领域的龙头 龙抬头公式源码经典著作,深度揭示了。NET框架的内幕。通过阅读《深入理解。NET》,读者可以掌握。NET的设计原则,洞悉高效创建高性能应用程序的秘诀。《深入理解。NET》含有丰富的代码,均采用C#编写。《深入理解。NET》适合各层次。NET开发人员阅读。简述C#源程序在.NET平台上的运行机制
.Net Framework是一个以规格为基础的开发平台。而这份规格统称为CLI(Common Language Infrastructure),而最初由Micrsoft依据这份规格所自行实现的产品就是CLR 。在CLI规格中,又细分为四个子规格。CIL(Common Intermediate Language)、CTS(Common Type System)、在CTS中又细分CLS(Common Language Specification)子规格和VES(Virtual Executing System)。CLS包含大多数语言都能实现的类型,CLI规范支持CLI的程序语言至少必须满足CLS的规格,这样才能达到跨语言集成的目的。
CLR运行机制
支持CLI的程序语言必须拥有一个编译器,该编译器必须具备将源码编译成IL Code的能力,也就是CIL规格所定义的语言格式,然后交由CLR来运行。在载入IL Code之后,CLR会调用JIT Complier(Just-In-Time Complier)将这些IL Code转化为Native Code,也就是机器码来运行。
.NET core扫盲
.NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NET Core出现了,它让开发者们在官方和社区的支持走出了Windows,可以在macOS,Linux主流distributions上编写调试并部署.NET程序。
.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在 GitHub上,由微软官方和社区共同支持。它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于 BCL的层面上看)。这是因为在当前版本中(1.0),.NET Core中的大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC, JIT, 部分类型)。
现在的.NET Core 1.0版本是一个很小的核心,APIs和工具也并不完整,但是随着.Net Core的不断完善,补充的Apis和创新也会一起整合到.NET Framework中。也就是说,.NET Core微软会同时更新.NET Framework和.NET Core,他们就像俩兄弟,共同努力致富(致谁的富?当然是.NET开发者们),实现所谓的天下大同,也就是 .NET 标准2.0
这里不得不提到一个叫做 .NET Standard Library概念。作为.NET平台APIs开发官方支持标准,它要求所有的.NET框架APIs都遵循向下兼容。比如说.NET Framwork 4.6支持.NET Standard Library 1.3,.NET Framwork 4.6.2框架支持.NET Standard Library 1.5,而.NET Core 1.0框架支持1.6标准。
Tips:是不是想起了MSCorEE.dll这个垫片,它同样承载着Windows平台上为.NET应用程序选择CLR版本的工作
第二种方式和.NET Native也是不一样的,仍然使用CoreCLR,而.NET Native使用CoreRT作为运行时,详细信息请见 dotnet/corert
.NET Core 1.0版本中支持的编程语言仅有C#(F#和VB暂未实现),这里还要提到一个开源的语言编译器Roslyn,它负责将代码编译成我们熟悉的IL语言,然后再借由AOT或JIT编译器编译成机器熟悉的机器语言。
以下内容演示在Windows和CentOS 7.2下的命令行生成和发布demo
3.1 Win
3.1.1 安装 .NET Core SDK和 .NET Core Runtime .NET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI 工具
3.1.2 简单的运行结果 打开cmd,依次输入mkdir .project(创建目录),cd .\.project(进入目录),dotnet new(新建初始项目),dotnet restore(还原依赖),dotnet run(运行)即可运行第一个Hello World程序
3.2 CentOS 7.2(本地Hyper-V)
3.2.1 安装和运行 详情请见: .NET Core in CentOS,大致命令如下
第六行命令后可使用dotnet --info查看是否链接成功,显示如下
以上步骤在.NET Core官方网站都可以找到,可以看到应用在经过简单的dotnet new, dotnet restore, dotnet run命令后就跑起来了,但是这其实是类似于开发环境中的调试运行,而且win上new的应用此时也不能直接跨平台到Linux下运行,所以我们又得提到dotnet publish命令了
3.2.2 Self-contained applications 发布 (1) 修改project.json文件 我们现在win下按照步骤new一个新的HW控制台应用self,按照 官方文档要求,我们需要用以下内容替换原来project.json文件(删除"type": "platform",并增加runtimes节点)
(2) 执行restore和publish操作
之后执行dotnet restore指令,针对平台进行还原操作。该步操作耗时较久,虽然只是两个平台,第一次也花了较长时间。紧接着进行进行dotnet publish -r centos.7-x -c release。
dotnet publish指令详见 dotnet-publish - Packs the application and all of its dependencies into a folder getting it ready for publishing (3) 在Linux平台上运行
上述操作后,我们只需要将发布后的文件夹(bin/release/netcoreapp1.0/centos7-x/publish,包含self.exe)上传到Linux root目录下project(新建)文件夹中, 在Shell中输入指令
修改可执行权限后,即可成功运行“Hello World”,这就是我们“Self-contained applications”方式的部署方法
至此,.NET Core的学习便告一段落了,以上内容简单介绍了.NET Core的组成和特性,同时也在Windows和Linux系统上通过两种不同的部署方式成功运行了示例。相比较之前的.NET Framework傻瓜式部署,.NET Core的新奇真是让我眼前一亮。接下来,我也会将.NET Core和 ASP.NET Core的学习记录下来,欢迎指正。
4.2 相关学习资料
5. 参考资料
.NET基础知识
在开发世界中,.NET框架提供了一个强大而灵活的运行环境,即公共语言运行时(CLR)。该运行时简化了代码执行的管理,赋予开发人员一个受控执行环境,通过编译器和其他工具共同作用,实现其功能。
自描述组件的一大优势在于,它们无需额外文件即可使用。类定义无需单独的头文件,从组件内元数据中直接获取。跨语言或过程边界访问组件无需特定的IDL文件、类型文件或proxy/stubs,所需信息已包含在元数据中。识别开发者请求服务属性,无需展开各自的配置信息。关键在于,元数据在编译过程中由源代码生成并与可执行代码同步保存,确保与可执行部分始终保持一致。
微软的.NET框架引入了组合体概念,将资源和类型打包成一个单元进行配置。元数据,即组合体的名单,包含类型和资源表等信息,以及如版本号等从属关系信息。开发人员可指定版本策略,决定运行时是否装入系统上已安装的最新组合体版本、指定版本或编译时使用的版本。
在操作系统中,多份相同组件可能同时存在,但通常只有一个被注册、加载至内存并执行。为了管理这种策略,.NET Framework CLR提供了支持并行配置的架构。组合体既可为单个应用程序私有,也可为多个应用程序共享,同一台机器上可同时配置多个组合体的不同版本。应用程序配置信息定义查找路径,确保运行时为同时运行的两个不同应用装入同一组合体的不同版本,从而解决组件版本不兼容问题,提高系统整体稳定性。
由于组合体是自描述的,无需在系统上进行显式注册。配置简单到将文件复制到目录中即可(如果需要安装未经组织化的组件,情况会稍显复杂)。配置信息存储在可被任意文本编辑器编辑的XML文件中。运行时提供完整的安全服务,确保未授权用户无法访问机器资源,防止代码执行未经允许的操作,增强系统整体安全性和可靠性。
运行时不仅支持代码访问安全,还支持基于角色的安全。通过代码访问安全机制,开发人员为应用程序指定完成任务所需的权限,如写文件或访问环境变量。这些信息与代码标志一同存储在配置级别上。在代码加载内存及执行方法调用时,运行时验证是否赋予代码所要求的权限。若无法赋予,记录安全冲突信息。权限策略,即信任策略,由系统管理员建立,基于代码证据,例如代码发布者、来源以及组合体中的代码标志和所需权限。开发人员可指定显然不需要的权限,以防他人滥用代码。若权限依赖于运行时才了解的信息,则可进行依赖性安全检查。
除了代码访问安全,运行时还支持基于角色的安全。基于角色的安全建立权限模板,以用户身份而非代码标志为基础。角色表明用户所属类别,在开发和配置阶段定义。分配权限策略被分配到每个预定义的角色。运行时确定用户身份,代码代表此身份运行。运行时决定用户属于哪个角色,然后给予基于该角色的权限。
2024-12-24 00:35
2024-12-23 23:52
2024-12-23 22:41
2024-12-23 22:33
2024-12-23 22:18