C#图解教程(第四版)小笔记——命名空间和程序集

C#和.NET框架

.NET由三部分组成,执行环境称为公共语言运行库CLR(Common Language Runtime)、编程工具涵盖了编码和调试需要的一切、基类库BCL(Base Class Library)。
严格来说.NET由CLR和FCL(框架类库)组成,不包括工具。FCL是BCL的超集,还包括Windows Forms、ASP .NET、LINQ以及更多命名空间
C#图解教程(第四版)小笔记——命名空间和程序集_第1张图片
CLR管理:
■ 内存管理和垃圾收集(GC)
■ 代码安全验证
■ 代码执行、线程管理、异常处理
编程工具包括:
■ Visual Studio集成开发环境(IDE)
■ .NET兼容的编译器(C#、Visual Basic .NET、F#、IronRuby和托管的C++等)
■ 调试器
■ 网站开发服务端技术,如ASP .NET和WCF
C#图解教程(第四版)小笔记——命名空间和程序集_第2张图片

命名空间和程序集

创建类库的步骤:

在VS新建项目模板中,选择类库。编辑完成代码后生成dll文件。

namespace SuperLib
{
    public class SquareWidget
    {
        public double SideLength = 0;
        public double Area
        {
            get{return SideLength * SideLength;}
        }
    }
}

C#图解教程(第四版)小笔记——命名空间和程序集_第3张图片
生成的dll文件保存在bin的子文件夹内。

引用程序集的步骤:

在解决方案管理器(Solution Explorer)中,右键依赖项(Reference)目录,选择添加引用(Add Reference)。浏览已生成的程序集的dll文件,点击确定。
C#图解教程(第四版)小笔记——命名空间和程序集_第4张图片

C#图解教程(第四版)小笔记——命名空间和程序集_第5张图片

mscorlib库

它必须总是被引用,所以VS不把它显示在Reference中,实际上引用类库如下:
C#图解教程(第四版)小笔记——命名空间和程序集_第6张图片

命名空间

命名空间是共享命名空间名的一组类和类型。
完全限定名:包括命名空间名、分隔点以及类名的完整字符串,称为类的完全限定名。
C#图解教程(第四版)小笔记——命名空间和程序集_第7张图片
命名空间名可以是任何有效标识符,且可以包含句点符号。
命名空间声明可以嵌套,但是嵌套的命名空间B并不是A的子集,B的成员不属于A,命名空间是独立的。

  • 嵌套声明:在命名空间A内部声明命名空间B
  • 分离声明:在命名空间A外部声明命名空间A.B

命名空间可以跨文件扩展。同一命名空间下,声明在分离的源文件中的类,可以被编译成单一的程序集,也可以被编译成分离的程序集。C#图解教程(第四版)小笔记——命名空间和程序集_第8张图片

using指令

必须放在源文件的顶端(但是在#define和#undef后)。
使用了using语句,可在使用命名空间限定类时省略编写命名空间名加句点符号。
using可以指定别名给命名空间,或命名空间内的一个类型。

using 命名空间名;
using 别名 = 命名空间名;		//指定命名空间的别名,需要使用别名.类型名的形式,不能省略别名.
using 别名 = 命名空间名.类型名;

程序集的结构

程序集本身并不包含本地机器代码,而是公共中间语言代码,还包含实时编译器(JIT)在运行时转换CIL到本机代码所需的一切,包括它引用的程序集的引用。
程序集的扩展名通常为.exe.dll
大部分程序集由一个单独的文件组成。包含4个主要部分:清单、类型元数据、CIL代码、资源。
C#图解教程(第四版)小笔记——命名空间和程序集_第9张图片
程序集代码文件成为模块。对于有多个模块的程序集,一个文件是主模块,其他是次要模块。

  • 主模块
    含有程序集的清单和到次要模块的引用
  • 次要模块
    文件名以.netmodule结尾

C#图解教程(第四版)小笔记——命名空间和程序集_第10张图片

程序集标识符

程序集标识符由四个部分组成,共同唯一标识了一个程序集:

  • 简单名
    不带扩展名的文件名。也被称为程序集名或友好名称(friendly name)
  • 版本号
    由四个据点分开的整数字符串组成,形式为MajorVersion.MinorVersion.Build.Revision。如2.0.35.9。
  • 文化信息
    字符串,2-5个字符,代表语言,或代表语言和国家或地区。如:美国英语:en-US
  • 公钥
    128字节字符串,生产该程序集的公司唯一的。可以和私钥一起用于创建安全的数字

C#图解教程(第四版)小笔记——命名空间和程序集_第11张图片

强命名程序集

强命名程序集有一个唯一的数字签名依附于它,更加安全。无强名称的程序集称为若命名程序集。
强名称唯一标识了程序集,没有CLR安全组件来捕获更改,强命名程序集的内容不能被改变。
强命名程序集默认只能访问其他强命名程序集。
强名称由编译器产生,而不是程序员。编译器产生强名称,接受关于程序集的信息,并散列化这些信息以创建一个唯一的数据签名依附到该程序集。在散列处理中使用:
■ 组成程序集的字节序列
■ 简单名称
■ 版本号
■ 文化信息
■ 公钥/私钥对

创建强命名程序集

使用VS强命名一个程序集,必须有一份公钥/私钥对文件的副本。

步骤:
右键点击解决方案管理器的当前程序集,选择【属性】打开属性设置。
选择【签名】,勾选【为程序集签名】,在选择下拉框内点击【新建】创建新的密钥文件,选择【浏览】选取已存在的密钥文件。
■ 也可以使用Strong Name工具生成

程序集的部署

私有方式部署

所需dll文件在同一文件下,程序就能良好工作。这称为复制文件(XCopy)部署。该程序集称为私有程序集。
私有程序集所在目录称为应用程序目录。没有必要在注册表中注册组件。

共享程序集和GAC

.NET有一个称为全局程序集缓存(GAC)的贮藏库,放进GAC的程序集被称为共享程序集。共享程序集能被系统中其他程序集共享。

只有强命名程序集能被添加到GAC。
GAC位于Windows系统目录的子目录中,.NET4.0以前位于Windows\Assembly中,4.0后位于Windows\Microsoft.NET\assembly中。

安装程序集到GAC,CLR的安全组件会先检验数字签名是否有效,若无数字签名,或无效,则不安装。只检查一次。

使用gacutil.exe命令行工具可以从GAC中添加或删除程序集,列出GAC包含的程序集。

3个常用指令:

  • /i:插入一个程序集
  • /u:卸载一个程序集
  • /l:列出GAC中的程序集

GAC内的并肩执行

GAC内可能存在许多不同的程序集,他们的文件名相同,但是版本号或公钥等不同成了不同的程序集(标识符不一致)。导致不同的应用程序在同一时间很容易使用不同版本的同一DLL,这称为并肩执行(side-by-side Execution)

配置文件

配置文件含有关于应用程序的信息,共CLR在运行时使用。可以用于指定CLR使用一个不同版本的DLL,或搜索程序引用的DLL时在附加目录中查找。
配置文件由XML代码组成,不包含C#代码。
配置文件放在应用程序目录中。
C#图解教程(第四版)小笔记——命名空间和程序集_第12张图片

延迟签名

在延迟签名中,编译器只使用公钥/私钥对中的公钥,公钥可以被放在完成的程序集标识符清单中。
延迟签名使用一个为0的块保留数字签名的位置。

创建延迟签名:
①创建一个密钥文件的副本,它只有公钥
②为程序集范围内的源代码添加一个名称为DelaySignAttribute的附加特性,并设置为true
C#图解教程(第四版)小笔记——命名空间和程序集_第13张图片
延迟签名的程序集不是强命名的,不允许直接部署到GAC。
要部署延迟签名的程序集,必须首先使用命令行取消针对这个程序记得GAC签名确认,并允许它被装在GAC中,在VS命令提示中输入:

sn -vr MyAssembly.dll

C#图解教程(第四版)小笔记——命名空间和程序集_第14张图片

你可能感兴趣的:(C#小笔记,c#)