命名空间与程序集
Using作为引入命名空间指令的用法规则为:
using Namespace;
在.NET程序中,最常见的代码莫过于在程序文件的开头引入System命名空间,其原因在于System命名空间中封装了很多最基本最常用的操作,下面的代码对我们来说最为熟悉不过:
using System;
这样,我们在程序中就可以直接使用命名空间中的类型,而不必指定详细的类型名称。using指令可以访问嵌套命名空间。
关于命名空间:
命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。例如,在.NET中很多的基本类型都位于System命名空间,数据操作类型位于System.Data命名空间,
1. mscorlib.dll 含有 C# 类型以及大部分 .NET 语言的基本类型的定义,在编译 C# 程序时,它必须总是被引用,所以 Visual Studio 不把它显示在 Reference 目录中。
2. 命名空间把一组类型组合在一起并给它们一个命名空间名称,带有命名空间名称和类名的整体字符串被称为完全限定名。
3. 命名空间内的每个类型必须有别于所有其他类型,命名空间内的类型成为命名空间的成员,一个源文件可以包含任意数目的命名空间声明,可以顺序也可嵌套。
4. 命名空间不是封闭的,可以在不同的源文件中声明,源文件可以被编译成单一的程序集或分离的程序集。一个命名空间可以是另一个命名空间的成员,这个成员被称为嵌套的命名空间,注意内层命名空间的成员 (如:类) 不是外层命名空间的成员 。
5. 嵌套命名空间有两种形式: 1. 在一个命名空间中声明另一个命名空间; (在命名空间A中声明B命名空间)2. 单独声明一个命名空间,名称为:外层命名空间名 . 次命名空间名(比如:A.B,表示命名空间A 中还有一个命名空间B,B是A的子命名空间)。
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
Using作为引入命名空间指令的用法规则为:
using Namespace;
在.NET程序中,最常见的代码莫过于在程序文件的开头引入System命名空间,其原因在于System命名空间中封装了很多最基本最常用的操作,下面的代码对我们来说最为熟悉不过:
using System;
这样,我们在程序中就可以直接使用命名空间中的类型,而不必指定详细的类型名称。using指令可以访问嵌套命名空间。
关于命名空间:
命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。例如,在.NET中很多的基本类型都位于System命名空间,数据操作类型位于System.Data命名空间,
1. mscorlib.dll 含有 C# 类型以及大部分 .NET 语言的基本类型的定义,在编译 C# 程序时,它必须总是被引用,所以 Visual Studio 不把它显示在 Reference 目录中。
2. 命名空间把一组类型组合在一起并给它们一个命名空间名称,带有命名空间名称和类名的整体字符串被称为完全限定名。
3. 命名空间内的每个类型必须有别于所有其他类型,命名空间内的类型成为命名空间的成员,一个源文件可以包含任意数目的命名空间声明,可以顺序也可嵌套。
4. 命名空间不是封闭的,可以在不同的源文件中声明,源文件可以被编译成单一的程序集或分离的程序集。一个命名空间可以是另一个命名空间的成员,这个成员被称为嵌套的命名空间,注意内层命名空间的成员 (如:类) 不是外层命名空间的成员 。
5. 嵌套命名空间有两种形式: 1. 在一个命名空间中声明另一个命名空间; (在命名空间A中声明B命名空间)2. 单独声明一个命名空间,名称为:外层命名空间名 . 次命名空间名(比如:A.B,表示命名空间A 中还有一个命名空间B,B是A的子命名空间)。
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