热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2.3强命名EnterpriseLibrary程序集

版权所有(c)2007DorianDeng。署名共享非商用。转载请注明出处:http:blog.csdn.netdoriandengarchive2007092017
版权所有(c) 2007  Dorian Deng。署名 共享 非商用。
转载请注明出处: http://blog.csdn.net/doriandeng/archive/2007/09/20/1792163.aspx


如果你要构建 Enterprise Library ,你也许要强命名程序集。一个强命名由程序集的标识组成,标识包括它的简单文本名称、版本号和文化信息(如果它支持的话),加上公钥和数字签名。它使用相应的私钥从一个程序集文件(文件包含程序集清单,它依次包含名称和生成程序集的所有文件的哈希)生成。用一个强名称签名一个程序集,以确定名称是全局唯一的。有一样的强名称的程序集应该是一样的。

例如,如果打算在多个程序集之间共享 Enterprise Library 程序集,可以安装它们到全局程序集缓存中。在全局程序集缓存中的每个程序集,必须有一个全局唯一的名称,这可以用一个强名称来确定它。即使仅在单一的应用程序中使用程序集,也可以强命名程序集以保证应用程序使用了正确的程序集版本。

强名称可以满足下列需求:

  • 强名称保证名称的唯一依赖于唯一的密钥对。没有人能生成同样的程序集名称,而你可以,因为用一个私钥生成的程序集有不同的名称要好过用另一个私钥生成程序集。

  • 强名称保护程序集的版本系。强名称可以确保没有谁可以产生你的程序集的子序列版本。用户可以确认他们加载的程序集版本,与应用程序构建所使用的版本来自同一发布者。

  • 强名称提供了强完整检查。通过 .NET Framework 安全性检查可以保证程序集的内容在它构建后没有被修改过。然而,要注意的是强名称的所在和它们自己并不隐含信任级别,例如,数字签名和支持证书所提供的级别。

关于部署程序集到全局程序集缓存中的信息,请参见用程序集和全局程序集缓存工作。

使用强名称向导包

因为大量项目和让单元测试程序集访问应用程序块程序集的内部类型、成员的[InternalsVisibleTo]属性的包含,强命名 Enterprise Library 程序集是困难且耗时的。此 Enterprise Library 发行包含了预编译、强命名的程序集,但如果你打算定制代码的话,你依然想要自己强命名程序集。Enterprise Library 的此发行包含了一个与 Visual Studio 集成的强命名向导包。它自动处理项目的强命名集合,也修改任何 [InternalsVisibleTo] 属性以包含一个公钥。这个向导包对 Enterprise Library 特别有用,但它也可以用于其他 .NET Framework 解决方案。

向导包包含下列功能:

创建强名称密钥对文件

此方法创建一个公/私钥对。如果你还没有打算用于签名程序集的密钥对文件,可以首先使用此方法。

强命名此解决方案或解决方案目录中的所有项目

此方法用一个密钥对文件以强命名整个解决方案或解决方案中的一个项目。如果你从解决方案根中选择方法,在解决方案中的所有项目都将被强命名。你也可以用选择特定项目的方法选择你要强命名的项目。

使用强命名向导包

  1. 打开 Visual Studio;

  2. 打开包含要强命名的项目的解决方案;

  3. 工具菜单上,单击Guidance Package Manager

  4. Guidance Package Manager 对话框中,单击Enable/Disable Packages

  5. Enable and Disable Packages 对话框中,选择要使之可用的包;

  6. 单击OK

  7. Guidance Package Manager对话框中,单击关闭

创建密钥对文件

  1. 右单击一个项目文件夹;

  2. 单击Create a new strong-name key pair file

  3. Create Key Pair for Strong Naming 对话框中,输入密钥对文件名;

  4. 单击Finish

在拥有一个密钥对文件后,就可以强命名在文件中的项目了。

强命名一个项目

  1. 在一个项目上右单击;

  2. 单击Strong-name all projects in this solution or solution folder

  3. Strong-Name Projects in Solution对话框中,输入密钥对文件的名称或者导航到它并选择它。

  4. 如果想要向导包自动用公钥更新[InternalsVisibleTo] 属性,选择Update InternalsVisibleTo

  5. 单击Finish

使用 Visual Studio 强命名 Enterprise Library 程序集

如果不打算使用强命名向导包,可以使用 Visual Studio 强命名 Enterprise Library 程序集。要用强名称来签名程序集,必须要有一个公/私钥对,此公开和私有的加密钥用于在编译时创建强命名程序集。如果多个开发者使用 Enterprise Library ,他们将使用同一强命名程序集,这意味着每个人都使用同一个密钥对来签名程序集。第三个过程描述了如何将一个公钥签名到程序集中。最后一个过程描述如何更新InternalsVisibleTo属性。

创建密钥对

  1. 在 Visual Studio 命令提示符下,跳转到将要保存密钥对的目录;

  2. 输入

    sn –k keyfile.snk

    创建一个密钥对。

注意

也可以在 Visual Studio 2005 中使用CreateStrongName 对话框创建一个密钥对。要访问此对话框,在解决方案浏览器中选择一个项目节点。在项目菜单中,单击属性。当项目设计器出现时,单击签名标签。在签名页中,选择为程序集签名,然后在选择强名称密钥文件的下拉框中选择新建

必须从密钥对中提取出公钥(公钥需要用于InternalsVisibleTo 属性)。以下过程说明了如何提取公钥并显示它。

提取并显示公钥

  1. 在命令提示符下,输入sn –p keyfile.snk publickey.pk 来从密钥对是提取公钥;

  2. 输入sn –tp publickey.pk 以16进制的格式显示公钥。保持配置控制台窗口打开或者复制到一个文本文件中。

下一过程描述了如何签名一个密钥到 Enterprise Library 程序集中。打开EnterpriseLibrary.VSTS.sln EnterpriseLibrary.NUnit.sln解决方案文件。(这依赖于你安装了哪个 Visual Studio 版本)每个项目都按照这些步骤做,包括单元测试和设计项目。

签名一个公钥到一个项目中

  1. 在 Visual Studio 中,在解决方案浏览器中选择项目节点。在项目菜单上选择属性(或者在解决方案浏览器中右单击项目节点,选择属性)。

  2. 在项目设计器中,单击签名标签。

  3. 选择为程序集签名复选框。

  4. 选择强名称密钥文件的下拉框中选择浏览

  5. 选择文件对话框中,导航到创建的密钥文件或者在文件文本框中输入它的路径,单击打开来选择它。

  6. 关闭属性窗口并保存修改。

程序集中的应用程序块单元测试是与应用程序块的程序集分离的。要让单元测试程序集访问应用程序块程序集的内部类型和成员,应用程序块使用了 InternalsVisibleToAttribute 属性。必须更新此属性以包含强命名程序集的公钥。

更新 InternalsVisibleTo 属性

  1. 在 Visual Studio 中,指向 编辑 菜单中的查看和替换,然后单击在文件中查找。

  2. 在整个解决方案中搜索InternalsVisibleTo 属性。

  3. 对每个InternalsVisibleTo执行下列步骤:

  4. 复制从密钥对文件中提取出的完全的公钥(不是令牌)。

  5. 添加公钥到属性中,就像如下示例:

    [assembly: InternalsVisibleTo("Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Tests,PublicKey=00240000048000009400000006020000002400005253413100040000010001008B3B735C2738A3A3518083C40A3AF8518DBA6D299F0DB7883A9BE2BFF1343B72A65A04EE8DEACF3A2A5B240126C1E803D14FEEDAC508DE566251756E0EAD6323D1C2B121B24904FEE55086CF1ACBD1146194603421DC0E13D9DC486422180ED756CCDADF31C0B7E4F58FAC82C867F26D8D886A45FF503D7B62BCB24A160C64F8")]

    注意

    公钥必须输入在一行中,当从命令提示符窗口复制它时,它是在多行中的(就像此示例)。当你更新InternalsVisibleTo 属性时将它放在一行中。

  6. 保存修改的每个文件。

  7. 重新构建整个解决方案。


推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了使用Rust语言编写、保存和编译程序的简单步骤。首先,打开记事本文件并编写程序代码,然后将代码保存到一个以.rs为扩展名的文件中。接下来,使用rustc命令来编译运行程序。最后,通过命令行运行编译后的程序,得到输出结果。如果遇到编译错误,可以下载Build Tools for Visual Studio 2017来解决。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Carve库在Visual Studio2015中的编译方法及注意事项
    本文介绍了在Visual Studio2015中编译Carve库的方法及注意事项。首先下载Carve库,并使用Visual Studio2015打开,生成后在bin目录下会生成.lib文件。同时,本文还指出了之前在Visual Studio2017中编译的问题,并提醒需要根据对应的平台进行编译,否则会出现报错。详细的步骤和注意事项请参考原文链接。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 1、工具VS2015OpenCV3.20下载地址:https:sourceforge.netprojectsopencvlibrary2、步骤1.下载工具ÿ ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
author-avatar
雯颜哥_135
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有