《CLR Via C#》第二章

目录

一、书籍分类和全书重点(尽量简化)

  1. 书籍分类

  2.全书重点

二、第二章 生成、打包、部署和管理应用程序及类型

  1.本章重点(尽量简化)

  2.章节联系

    2.1 二之一:

    2.2 二之三

三、本章详解

  1.NET Framework部署目标

  2.将类型生成到模块中

  3.响应文件

  4.元数据概述

  5.将模块合并成程序集

  6.程序集版本资源信息

  7.语言文化

  8.简单应用程序部署(私有部署的程序集)

  9.简单管理控制

四、问题

  1.C#编译生成的exe文件是什么?

五、思维导图


一、书籍分类和全书重点(尽量简化)

  1. 书籍分类

        理论文,主要讲的是CLR、C#和.Net的基础。

  2.全书重点

        由浅入深,透视CLR和.NET精髓,知其然,鞭辟入里,探究CLR和.NET机理,知其所以然。

二、第二章 生成、打包、部署和管理应用程序及类型

  1.本章重点(尽量简化)

        本章重点解释如何生成仅供自己的应用程序使用的程序集。

  2.章节联系

    2.1 二之一:

        第一章简单介绍了元数据和程序集,第二章将更为详细的介绍。

    2.2 二之三

        第三章详细介绍了更高级的概念,包括生成和使用程序集,使其中包含的类型能够由多个应用程序共享。

三、本章详解

        尽量用图解法、比喻法来实现记录。要用能教导别人的方式来记录。

  1.NET Framework部署目标

        安装更新需要稳定。在安装新应用程序的时候,要能保证旧应用程序还继续兼容能运行。

        安装和卸载复杂性要小。例如Windows安装应用程序会将文件安装到其他地方,例如注册表、桌面快捷方式等。所以导致应用转移的时候,就不能只复制粘贴程序安装位置文件,还得整注册表等。并且卸载也不一定保证卸载干净,注册表不一定卸载了。

        安全性要好。应用程序必须要集成到系统中,让用户能够允许或者禁止代码访问自己的系统资源。

  2.将类型生成到模块中

public sealed class Program{

      public static void Main(){

             System.Console.WriteLine(“Hi”);

      }

}

        这个应用程序定义了Program类型,其中有名为Main public static方法。Main中引用了另一个类型System.Console。System.Console是 Microsoft实现好的类型,用于实现这个类型的各个方法的IL代码存储在MSCorLib.dll文件中。总之,应用程序定义了一个类型,还使用了其他公司提供的类型。

        将上述代码放到源代码文件(Program.cs后,命令执行一下命令即可运行:

        csc.exe /out:Program.exe /t:exe /r: MSCorLib.dll Program.cs

        这个命令指示C#编译器生成名为Program.exe可执行文件,并且类型Win32控制台应用程序类型(/t[arget]:exer[eference]: MSCorLib.dll是告诉编译器对于源代码没有定义的System.Console.WriteLine方法去到MSCorLib.dll程序集查找(其实可以省略,因为都要用到)。

        Windows支持三种应用程序

  1. 控制台用户界面(Console User Interface,CUI)使用/t:exe开关。
  2. 图形用户界面(Graphical User Interface,GUI)使用/t:winexe开关。
  3. Windows Store应用/t:appcontainerexe开关。

  3.响应文件

        响应文件就是一组命令行开关的文本文件,运行就会执行许多命令。相当于整合命令。用@调用,为rsp文件

        csc.exe @MyProject.rsp CodeFile1.cs CodeFile2.cs

        .NET Framework会有全局的CSC.rsp响应文件,包含很多必要的参考,例如:/r:System.dll、/r:System.Date.dll。

  4.元数据概述

        元数据是由几个表构成的二进制数据块。有定义表、引用表和清单表

        定义表:记录模块、源代码的类型、方法等定义的表。有ModuleDef对模块标识的记录项(记录模块文件和扩展名、ID等)、有TypeDef标识类型名称、基类型、标志等。

        引用表:记录程序集、模块、类型方法等引用的表。

  5.将模块合并成程序集

        Program.exe不仅是PE文件,也是程序集(assembly)。程序集里边包含清单,是元数据表的集合。CLR操作的是程序集,先加载包含“清单”元数据表文件,再根据清单获取程序集中其他文件的名称。程序集可以视为一个逻辑EXEDLL

        程序集可以通过命令将常用和不常用的类型编译到不同模块。

  6.程序集版本资源信息

        程序集可以定制特性来设置各种版本。

  7.语言文化

        程序集可以指定具体的语言文化,例如英语,法语等。

  8.简单应用程序部署(私有部署的程序集)

        VS会将应用程序所有的程序集打包成一个.appx文件。用户安装时,CLR会从包含所有程序集的目录加载程序集。添加开始快捷方式等。

  9.简单管理控制

        不学,用到再说。

四、问题

  1.C#编译生成的exe文件是什么?

        回答:exe文件是标准PE(可移植执行体)文件,能在32或64位Windows的计算机加载运行。托管PE文件里包含有PE32(+)头、CLR头、元数据和IL。

五、思维导图

猜你喜欢

转载自blog.csdn.net/weixin_51374560/article/details/128807200