[CLR via C#]1.3 加载公共语言运行时

原文:[CLR via C#]1.3 加载公共语言运行时

1. 你生成的每个程序集可以是EXE,也可以是DLL。最终都是有CLR管理这些程序集中代码的执行。

2. VS2010中,创建新的EXE项目时,默认平台是x86,而不是anycpu。

 

3. Windows的64位版本提供了一个名为WoW64(Windows on Windows64)的技术,允许允许32位的Windows程序。这是因为这个技术能模拟x86的指令集,但这样会显著影响性能。

 

4. 编译目标平台对生成的模型的影响以及运行时的影响。

5. Windows检查好EXE文件头,决定创建32位、64位还是WoW64进程之后,会在进程的地址空间中加载MSCorEE.dll的x86,x64或IA64版本。然后,进行的主线程调用MSCorEE.dll中定义的一个方法。这个方法初始化CLR,加载EXE程序集,然后调用其入口方法(Main)。最后,托管的应用程序将启用并运行。

6.如果非托管程序调用LoadLibrary来加载一个托管程序集,Windows会自动并初始化CLR(如果尚未加载的话),以便处理程序集中的代码。

时间: 2024-09-18 19:16:30

[CLR via C#]1.3 加载公共语言运行时的相关文章

公共语言运行时CLR由CTS、CLS、JIT组成,请问C#编译器和VB.NET编译器属于CLR吗?

问题描述 公共语言运行时CLR由CTS.CLS.JIT组成,那么请问:C#编译器和VB.NET编译器属于CLR吗? 解决方案 解决方案二:这两者应该没关系吧.是两个东西,编译器是将C#VB代码编译成CLR可以执行的中间语言.解决方案三:CLR跟JVM的意义基本相等,就是一个运行时的环境.直接查一下定义就可以看到,"CLR的核心功能包括:内存管理.程序集加载.安全性.异常处理和线程同步".因此可以看到它跟编程语言无关.MFC跟编程语言其实是也无关,但是它显然几乎只是被特定语言接受,不如C

.NET基础知识-公共语言运行时

   .NET提供了一个运行环境,叫做公共语言运行时(CLR).CLR管理代码的执行并使开发过程变得更加简单.CLR是一种受控的执行环境,其功能通过编译器与其他工具共同展现.以"运行时"为目标的代码称为受控代码(Managed Code).受控代码指向的对象在执行过程中完全被CLR所控制.在执行过程中,CLR提供自动内存管理.调试支持.增强的安全性及与受控代码(如COM组件)的互操作性.凡是符合CLS(公共语言规范)的程序语言(如C#和Visual Basic.NET等)所开发的程序都

CLR寄宿(中) 托管exe文件的加载和执行

托管exe文件的加载和执行过程在之前的文章做过简要的介绍,现在结合本章的内容进行详细的分析. 托管exe文件被启动的时候,首先被PE Loader载入.PE Loader载入exe文件之后,会分析PE文件头的data directory table,如果CLR_Header内的值不为0,表示该文件是托管PE文件,PE Loader 会立即载入 MsCorEE.dll,并且执行 MsCorEE.dll内的_CorExeMain()函数. 如果是Windows XP以前版本的操作系统(比如Windo

.NET编译器中CLR加载过程

按以下贴操作的: http://developer.51cto.com/art/200908/146091.htm 由于现在不太了解VS即时窗口,所以后面的测试没有作. 以前,看<程序员的自我修养>,讲解文件PE格式时,也涉及到这些内容.但主要以直接加载过程为主. 而现在.NET为主流了.所以要多学习呀. .NET的几个核心组件的被调用顺序大致是: mscoree.dll -----> mscorwks.dll(mscorsvr.dll)  -----> mscorlib.dll

混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...

今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常:   混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集   其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的Sy

.NET 动态加载程序集(二)

正式开始本文:在 .NET 框架中,将程序集加载至应用程序域的方法有几种.每种方法使用不同的类. 您可以使用下面的重载方法将程序集加载至应用程序域: System.AppDomain 类包含几种重载的 Load 方法.尽管这些方法可用于将任何程序集成功地加载至当前的或新的应用程序域,但它们主要还是用于 COM 交互操作.您也可以使用 CreateInstance 方法加载程序集. System.Reflection.Assembly 类包含两种静态重载方法:Load 和 LoadFrom.这两种

.NET 动态加载程序集 (三)

我们先看看一般的反射的动态方法查找 下面为ms自带的例子ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemreflectionmethodbaseclassinvoketopic.htm public class A {    public virtual int method () {return 0;} } public class B {    public virtual int method () {return 1;} }

编写、加载和存取插件程序(Plug-Ins)

在 2005 年一月刊的 MSDN 杂志文章中,你有一个例子程序的代码是用混合模式编写的.有没有可能动态加载 .NET 类或 DLL 并调用那些函数呢?假设我有一个本机 C++ 应用程序,我想允许用户在 .NET 中为该 C++ 程序编写插件.就像在 .NET 中使用 LoadLibrary 加载 DLLs 一样. Ravi Singh 我正在用 Visual C++ 6.0 编写一个插件应用,它是一个 DLL,输出和接收纯虚拟接口指针.加载 DLL 后,EXE 便调用 DLL 中输出的 C 函

关于C#中动态加载AppDomain的问题

在操作系统中,利用进程可以对正在运行的应用程序进行隔离,每个应用程序被加载到单独的进程中,并为其分配虚拟内存,进程无法直接 访问物理内存,只能通过操作系统将虚拟内存映射到物理内存中,并保证进程之间的物理内存不会重叠,但是进程最大的缺点就是效率问题, 尤其是进程的切换开销很大,而进程间不能共享内存,所以不可能从一个进程通过传递指针给另一个进程. 在.NET中出现了一个新的概 念:AppDomain--应用程序域,所有.NET应用程序都需要运行在托管环境中,操作系统能提供的只有进程,因此.NET程序