• 框架设计:CLR Via C# 第二章


    s2.1.NET Framework部署目标
    DLL hell:安装一个心应用程序时候,它可能莫名其妙地破坏了另一个已经安装好的应用程序。这个问题就叫做"DLL hell"。
    .NET Framework 正在尝试彻底解决DLL hell的问题。另外,.NET Framework还在很大程度上解决了应用程序状态在用户硬盘上四处分布的问题。例如:和COM不同的是类型不再需要注册表设置。但还是需要建立快捷方式。
    code access security代码访问安全性:.NET Framework包含的一个安全模型。
    2.2将类型集成到模块中
    csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs
    这个命令行指示c#编译器生成一个名为Program.exe的课执行文件(/out:Program.exe)。生成的文件属于Win32控制台应用程序类型(/t[arget]:exe)。
    MSCorLib.dll 是一个比较特殊的文件,因为它包含了所有核心类型:Byte,Char,String,Int32等,事实上,由于这些类型被使用得日此频繁,以至于c#编译器会自动引用MSCorLib.dll程序集。换言之,命令行其实可以如下简化(省略了/r开关):
    csc.exe /out:Program.exe /t:exe Program.cs
    在此 由于/out:Program.exe和/t:exe命令行开关是c#编译器的默认设定,所以命令行可以继续如下简化成下面这个样子:
    csc.exe Program.cs
    不使用c#编译器自动引用MSCorLib.dll程序集,使用开关/nostdlib
    csc.exe /out:Program.exe /t:exe /nostdlib Programe.cs
    但是肯定会报错,因为System.Console类型是在MSCorLib.dll中
    /t:exe 生成的是具有控制台用户界面(CUI)的应用程序
    /t:winexe 生成的是具有图形用户界面(GUI)的应用程序
    应答文件(response file)
    response file 其实就是将上面的命令写入一个rsp格式的文件中,在使用的时候直接调用如下
    例子:
        我们将如下命令写入MyProject.rsp文件中:
        /out:MyProject.exe
        /target:winexe
        使用上面文件里面的设置我们可以这么执行里面的内容
        csc.exe @MyProject.rsp CodeFile1.cs CodeFile2.cs
        上门的例子里面就同时编译了CodeFile1.cs 和 CodeFile2.cs两个文件。

    2.3元数据概述
    一个托管的PE文件由四个部分构成:PE32(+)头、CLR头、元数据以及中间语言(IL)
    PE32(+)头是Windows期望的标准信息。
    CLR头是一个小的信息块,它要求CLR的那些模块(托管模块)所持有的。包含:
        1、用于生成模块的CLR的major(主)和minor(副)版本号;
        2、一些标志(flag);
        3、一个MethodDef标记(稍后详述);
        4、它指定了模块的入口方法(前提是该模块是一个CUI或者GUI执行体);
        5、一个可选的强名称数字签名;
        6、模块内部的特定元数据表的大小和偏移量。(可以查看CorHdr.h头文件中定义的IMAGE_COR20_HEADER,从而了解CLR头的具体格式。
    元数据:是一个二进制块 有三个表
        1、定义表(definition table)
        2、引用表(reference table)
        3、清单表(manifest table)
  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1111073.html
Copyright © 2020-2023  润新知