目录
一、书籍分类和全书重点(尽量简化)
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]:exe)。r[eference]: MSCorLib.dll是告诉编译器对于源代码没有定义的System.Console.WriteLine方法去到MSCorLib.dll程序集查找(其实可以省略,因为都要用到)。
Windows支持三种应用程序:
- 控制台用户界面(Console User Interface,CUI)使用/t:exe开关。
- 图形用户界面(Graphical User Interface,GUI)使用/t:winexe开关。
- 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操作的是程序集,先加载包含“清单”元数据表文件,再根据清单获取程序集中其他文件的名称。程序集可以视为一个逻辑EXE或DLL。
程序集可以通过命令将常用和不常用的类型编译到不同模块。
6.程序集版本资源信息
程序集可以定制特性来设置各种版本。
7.语言文化
程序集可以指定具体的语言文化,例如英语,法语等。
8.简单应用程序部署(私有部署的程序集)
VS会将应用程序所有的程序集打包成一个.appx文件。用户安装时,CLR会从包含所有程序集的目录加载程序集。添加开始快捷方式等。
9.简单管理控制
不学,用到再说。
四、问题
1.C#编译生成的exe文件是什么?
回答:exe文件是标准PE(可移植执行体)文件,能在32或64位Windows的计算机加载运行。托管PE文件里包含有PE32(+)头、CLR头、元数据和IL。