03 2011 档案
摘要:2.1 .NET Framework部署目标 安装一个性的应用程序他可能莫名其妙的破坏了另一个已经安装好的应用程序:DLL hell。 2.2 将类型生成到模块中 C#编译器自动引用Msccorlib.dll程序集。 响应文件是一个文本文件,其中包含一组编译器命令行开关。执行csc.exe时,编译器会打开响应文件,并使用其中包含的所有开关,就像是这些开关直接在命令行上传给csc.exe。为了指示编...
阅读全文
摘要:NGen.exe工具,将一个应用程序集的所有IL代码编译成本地代码,并将这些代码保存到一个磁盘文件中,可以避免在运行时进行编译。1.4.1 IL是基于栈的,这意味着它的所有指令都要将操作数压入push一个执行栈, 并从栈弹出pop结果,IL指令是“无类型”的。将IL编译成本地cpu指令时,CLR会执行验证,以保证代码是安全无错的,在托管模块的元数据中,包含了要由验证过程使用的所有方法和类型信息。1.4.2 不安全的代码不安全的代码允许直接操作内存地址,并操作这些地址出的字节。用unsafe关键字标注,/unsafe。PEVerify.exe检查一个程序集的所有方法,并报告其中含有的不安全代码的
阅读全文
摘要:1.3加载公共语言运行时CLR:程序集可以是一个exe,也可以是一个dll(其中包含一组由exe使用的类型)如果程序集只包含类型安全的托管代码,那么所有代码能在32位或64位的windows系统上运行。如果要用不安全的代码或面向特定cpu的非托管代码,那么可使用/platform指定运行环境,默认为anycpu:任何windows版本。运行一个exe时,windows会检查这个exe的文件头,判断需要32位地址空间或64位,根据PE32或PE32+。然后windows会在进程的地址空间中加载MSCOREE.dll的X86或X64版本(分别位于不同目录中),接着,进程的主线程调用MSCOREE.
阅读全文
摘要:将源代码编译成托管代码:编译C#源代码的过程:C#源代码-->C#编译器-->托管模块(中间语言和元数据)托管模块的结构:PE32或PE32+头:标准windowsPE头文件。PE32格式,只能在windows 32位系统运行。还标示了文件类型:GUI、CUI、DLL。 文件生成时间。CLR头:CLR版本、托管模块入口方法main的MethodDef元数据标记,模块元数据,资源,强名称。元数据:两种类型的表:一、描述源代码中定义的类型和成员。二、描述源代码引用的类型和成员。IL中间语言代码:编译器编译源代码时生成的代码,在运行时,CLR将IL编译成本地cpu指令。每个面向CLR的编
阅读全文

浙公网安备 33010602011771号