CSharp(C#)语言_命名空间和程序集
引用其他程序集
- 编译器接受源代码文件并生成名称为 程序集 的输出文件
- 后缀
.dll
或.exe
- 在 Visual Studio 的 项目资源管理器中 右击 引用 → 添加 引用相应的类库 / 程序集
命名空间
关键字:namespace
定义:命名空间是共享命名空间名的一组类和类型
命名空间名:
- 你可以把命名空间名视为一个字符串,它加在类名或类型名的前面并且通过点进行分隔
- 包括命名空间名、分隔点,以及类名的完整字符叫做类的 完全限定名
命名空间可以被嵌套
using指令
避免不得不使用的完全限定名:using命名空间指令 和 using别名指令
关于using指令的要点:
- 必须在源文件的顶端,在任何类型声明之前
- 应用于当前源文件中的所有命名空间
using System; //命名空间指令
using s = System; //using别名指令
程序集的结构
程序集不包含本地机器代码,而是公共中间语言代码。它还包含实时编译器(JIT)在运行时转换CIL到本机代码所需的一切,包含对它所引用的其他程序集的引用
扩展名通常为:.exe
或.dll
- 程序集的清单包含以下几点:
- 程序集名称标识符
- 组成程序集的文件列表
- 一个指示程序集中内容在哪里的地图
- 关于引用的其他程序集的信息
- 类型元数据部分包含该程序集中定义的所有类型的信息。这些信息包含关于每个类型要知道的所有事情
- CIL部分包含程序集的所有中间代码
-
资源部分是可选的,但可以包含图形或语言资源
程序集代码文件称为模块。尽管大部分程序集由单文件组成,但有些也有多个文件。对于有多个模块的程序集,一个文件是主模块(primary module),而其他的是次要模块(sccondary modules )
- 主模块含有程序集的清单和到次要模块的引用
- 次要模块的文件名以扩展名.nctmodule结尾
- 多文件程序集被视为一个单一单元。它们一起部署并一起定版
程序集标识符
在.NET框架中,程序集的文件名不像在其他操作系统和环境中那么重要,更重要的是程序集的标识符(identity)
- 程序集的标识符有4个组成部分,它们一起唯一标识了该程序集,如下所示:
- 简单名 这只是不带文件扩展名的文件名。每个程序集都有一个简单名。它也被称为程序集名或友好名称(friendly name)
- 版本号 它由4个句点分开的整数字符串组成,形式为
MajorVersion.MinorVersion.Build.Revision
,例如2.0.35.9 - 文化信息 它是一个字符串,由2~5个字符组成,代表一种语言,或代表一种语言和一个国家或地区。例如,在美国使用英语的文化名是en-US。在德国使用德语,它是de-DE
- 公钥 这个128字节字符串应该是生产该程序集的公司唯一的
公钥是公钥/私钥对的一部分,它们是一组两个非常大的、特别选择的数字,可以用于创建安全的数字签名。公钥,顾名思义,可以被公开。私钥必须被拥有者保护起来。公钥是程序集的标识符的一部分
强命名程序集
强命名程序集有一个唯一的数字签名依附于它。强命名程序集比没有强名称的程序集更安全
- 强名称唯一标识了程序集。没有其他人能创建一个与之有相同名称的程序集,所以用户可以确信该程序集来自于其声称的来源
- 没有CLR安全组件来捕获更改,带强名称的程序集的内容不能被改变
创建强命名程序集
要使用Visual Studio强命名一个程序集,必须有一份公钥/私钥对文件的副本。如果没有**文件,可以让Visual Studio产生一个。可以实行以下步骤:
(1)打开工程的属性
(2)选择签名页
(3)选择Sign the Assembly复选框并输入**文件的位置或创建一个新的
程序集的私有方式部署
在目标机器上部署一个程序就像在该机器上创建一个目录并把应用程序复制过去一样简单。如果应用程序不需要其他程序集(比如DLL),或如果所需的DLL在同一目录下,那么程序应该会就在它所在的地方良好工作。这种方法部署的程序集称为私有程序集,而且这种部署方法称为复制文件(XCopy)部署
私有程序集几乎可以被放在任何目录中,而且只要它们依赖的文件都在同一目录或子目录下就足够了。事实上,可以在文件系统的不同部分有多个目录,每个目录都有同样的一组程序集,并且它们都会在它们各自不同的位置良好工作
- 关于私有程序集部署的一些重要事情如下:
- 私有程序集所在的目录被称为应用程序目录
- 私有程序集可以是强命名的也可以是弱命名的
- 没有必要在注册表中注册组件
- 要卸载一个私有程序集,只要从文件系统中删除它即可
共享程序集和GAC
私有程序集是非常有用的,但有时你会想把一个DLL放在一个中心位置,这样一个单独的复制就能被系统中其他的程序集共享。.NET有这样的贮藏库,称为全局程序集缓存(GAC)。放进GAC的程序集称为共享程序集
- 关于GAC的一些重要内容如下:
- 只有强命名程序集能被添加到GAC
- GAC的早期版本只接受带.dlI扩展名的文件,现在也可以添加带.exe扩展名的程序集了
- GAC位于Windows系统目录的子目录中。NET4.0之前位于\Windows\A.ssembly中,从NET 4.0开始位于\WindowsMicrosoft.NET assembly中