《C#图解教程》读书笔记第10章——命名空间和程序集

 

这本书讲解 C# 语言十分详细,我将其中的重要内容整理成条款,以备忘。

 

1.       mscorlib.dll 含有 C# 类型以及大部分 .NET 语言的基本类型的定义,在编译 C# 程序时,它必须总是被引用,所以 Visual Studio 不把它显示在 Reference 目录中。

 

2.       命名空间把一组类型组合在一起并给它们一个命名空间名称,带有命名空间名称和类名的整体字符串被称为完全限定名。

 

3.       命名空间内的每个类型必须有别于所有其他类型,命名空间内的类型成为命名空间的成员,一个源文件可以包含任意数目的命名空间声明,可以顺序也可嵌套。

 

4.       命名空间不是封闭的,可以在不同的源文件中声明,源文件可以被编译成单一的程序集或分离的程序集。一个命名空间可以是另一个命名空间的成员,这个成员被称为嵌套的命名空间,注意内层命名空间的成员 ( 如:类 ) 不是外层命名空间的成员

 

5.       嵌套命名空间有两种形式: 1. 在一个命名空间中声明另一个命名空间; 2. 单独声明一个命名空间,名称为:外层命名空间名 . 次命名空间名。

 

6.       using 指令必须放在源文件中任何类型声明之前,它通知编译器要使用来自某个指定命名空间的类型, using 还允许给命名空间命名空间内的一个类型 起一个别名,如: using     Sys = System;  using SC = System.Console;

 

7.       程序集大都由一个单独的文件构成,它的 4 大部分包括:清单、类型元数据、 CIL 代码、资源。少数多文件组成的程序集其中一个文件是主模块,其他的是次要模块,主模块含有程序集清单和到次要模块的引用。多文件程序集被视为一个单一单元,一起被部署和定版。

 

8.       程序集清单中包含程序集的标识符,包括:简单名版本号文化信息公钥 。公钥是公钥 / 私钥对的一部分,它们是一组两个非常大的经过遴选的数字,可以用于创建安全的数字签名。

 

9.       名称程序集有一个唯一 的数字签名,这个数字签名唯一的表示了程序集,带强名称的程序集的内容不能被修改 。强名称是由编译器产生的,它接受关于程序集的信息,并哈希这些信息以创建一个唯一的数据签名依附到该程序集。

 

10.   VS 强命名一个程序集,必须有一个公钥 / 私钥对文件的拷贝,在工程属性 中选择签名页 ,选择为程序集签名复选框并输入密钥文件的位置,编译器在编译时就会生成一个强命名的程序集。

 

11.   将一个程序集所依赖的文件 都放在同一目录或子目录下并复制到一台机器 上进行部署 这种方式叫做复制文件 (XCopy) 部署,通过这种方式部署的程序集叫做私有 程序集。私有程序集可以是强命名的或者是弱命名的,它所在的目录被称为应用程序目录,没有必要在注册表中注册组件,若要卸载它,只需删除即可。

 

12.   若要将一个 DLL 放在一个中心位置,使其能被系统中的其他程序集所共享 ,则应将其放进全局程序集缓存 (GAC ) ,放进 GAC 的程序集称为共享程序集。注意:只有 名称的程序集才能被放进 GAC .dll .exe 文件都可以放进 GAC ,它在 Windows/assembly 目录中。

 

13.   在安装一个程序集到 GAC 之前, CLR 的安全组件会首先检查程序集上的数字签名是否有效,若无效,则不会将它安装到 GAC ,若程序集已经在 GAC 内,则当它被正在运行的程序集引用时,不会再进行检查,这是一次性的。

 

14.   gacutil.exe 命令行工具允许从 GAC 添加或删除程序集,并列出 GAC 包含的程序集。主要参数有 -i :将一个程序集插入 (insert)GAC;  -u :从 GAC 卸载 (uninstall) 一个程序集; -l :列出 (list)GAC 中的程序集。

 

15.   程序集的标识符是由它所包含的四大部分组成的,若有任一部分不同则就制定了不同的程序集,所以 GAC 中可以有文件名相同但完全不同的程序集,它们可以完美共存,互不影响,解决了 Dll Hell 的问题。

 

16.   配置文件含有关于应用程序的信息,供 CLR 在运行时使用。配置文件的一个用途是更新一个应用程序集已使用新版本的 DLL ,在新版本 DLL 被注册到 GAC 中后,如果不想重新编译程序但又希望它使用新的 DLL ,则可以创建一个配置文件告诉 CLR 去使用新的版本 ,配置文件被放在应用程序目录中。注意:配置文件的名称由可执行文件的全名 ( 包括扩展名 ) 加上附加扩展名 .config 组成。

 

17.   通常为保护密钥,强名称都在最后进行,但弱命名的程序集不能部署到 GAC ,这会影响到开发和测试工作,延迟签名 用来解决此问题。在延迟签名中,编译期只使用密钥对中的公钥 ,并且要为程序集范围内的源代码添加一个名称为 DelaySignAttribute 的附加特性,并将它的值设为 true

 

18.   编译器产生的延迟签名程序集中用内容为 0 的块为数字签名保留了空间,在将程序集部署到 GAC 时,由于不是强名称的, CLR 不会允许,要在机器上部署它,必须先使用命令行指令取消这台机器上的 GAC 签名确认,在 VS 的命令提示符下使用命令 sn –vr  *.dll 。关于弱命名程序集、延迟签名程序集、强签名程序集的区别可参见 P197 的图 10-19

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值