• 第 3 章 共享程序集和强命名程序集


    3.1 节 两种程序集,两种部署

      CLR 支持两种程序集:弱命名程序集(weakly named assembly,即无签名的程序集) 和 强命名程序集(strongly named assembly,即带签名的程序集)。

      两者程序集结构完全相同。两者区别在于,强命名程序集使用发布者的公钥/私钥进行了签名。这一对密钥允许对程序集进行唯一性的标识、保护和版本控制,并允许程序集部署到用户机器的任何地方,甚至可以部署到Internet上。

      程序集有两种部署方式:私有和全局。

      [1] 私有部署:部署到应用程序基(根)目录或者某个子目录的程序集。

      [2] 全局部署:全局部署是指部署到一些公认位置的程序集。

      CLR 在查找程序集时,会检查这些位置。

      注意:

      [1] 弱命名程序集只能以私有方式部署;强命名程序集既可私有部署,也可全局部署。

      [2] 私有部署中的子目录分两种:一是基目录下建与程序集文件同名的目录(极少数程序集可用,因为每个程序集对应一个子目录);二是子目录由 XML 配置文件的 probing 元素的 privatePath 特性指定(可将多个程序集文件指定到一个子目录)。

    3.2 节 为程序集分配强名称

      强命名程序集具有四个重要特性,共同组成唯一性标识:文件名(不计扩展名)、版本号、语言文化、公钥。由于公钥数字很大,所以常用从公钥派生的小哈希值,公钥标记(public key token),即公钥的64位哈希值的最后8个字节。程序集标识字符串(程序集显示名称),实例如下:

      "System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"

      注:可使用 System.Reflection.AssemblyName 构造程序集名称,并获取程序集名称的各个组成部分。标识的程序集文件可为 .exe 或 .dll 文件。

      在 VS 中新建公钥/私钥文件,右键项目 → 属性 → 签名 → 勾选“为程序集签名(A)” → 然后从“选择强名称密钥文件”选择框中选择“<新建...>”。

    3.3 节 全局程序缓存

      全局部署的公认位置就是全局程序集缓存(Global Assembly Cache, GAC)。GAC的具体位置不同版本会有所变化。,一般在 " %SystemRoot%Microsoft.NETAssembly "。

      GAC 目录是结构化的:其中包含许多子目录,子目录名称用算法生成。永远不要将程序集文件手动复制到 GAC 目录;相反,要用工具完成这项任务。工具知道GAC的内部结构,并知道如何生成正确的子目录名。可用 GACUtil.exe 。

    3.4 在生成的程序集中引用强命名程序集

      安装.NET Framework 时,实际会安装 Microsoft 的程序集文件的两套拷贝。一套安装到编译器/CLR

  • 相关阅读:
    物理学——总结
    创建场景和赛道——挑战:为赛道建立一个新的单元测试
    物理学——牛顿运动定律
    物理学——挑战:实现道路碰撞检测
    1291. Gearwheels 夜
    hdu 4442 Physical Examination 夜
    hdu 4450 Draw Something 夜
    1129. Door Painting 夜
    hdu 4431 Mahjong 夜
    1128. Partition into Groups 夜
  • 原文地址:https://www.cnblogs.com/xinaixia/p/5856823.html
Copyright © 2020-2023  润新知