使用命令行工具SDK Command Prompt,键入:SN -T C:\*****.dll

就会显示出该dll具体的PublicKeyToken 数值。

如果该程序集没有强命名,则不会有PublicKeyToken 数值。

将一个程序集强命名的方法是:

用SN -k C:\***.snk命令生成***.snk文件,将该snk文件加载到项目中。在项目上右键属性,选择Signing选项卡,钩选中“Sign the assembly”,再在下拉列表中选择刚才生成的***.snk,重新编译程序集。

此后,该程序集就被强命名了,它的PublicKeyToken 就有相应数值了。

注意要用大写的-T,不能用小写的。

公钥标记由应用程序签名时所用公钥的SHA-1哈希代码的最后8个字节表示

 

 

如何安排强命名过程集(Strong Name Assembly)和GAC

1. 如何创立强命名过程集(Strong Name Assembly)

创立一个强命名过程集率先必需获得一个用强命名实用工具

(Strong Name Utility,即SN.exe,.NET SDK自带)发生的密钥。

下面简明推荐一下SN.exe的一些用法。 要发生一个公钥/私钥对:

a) SN –k MyCompany.Keys

该命名告诉SN.exe创立一个名为MyCompany.keys的文件。MyCompany.keys文件将包括以对以二进制款式存储的公有密钥和私有密钥。

b) 察看公有密钥:

率先生成一个只包括公有密钥的文件: SN –p

MyCompany.keys MyCompany.PublicKey

然后用-tp参数察看:SN –tp MyCompany.PublicKeys

Public key is

00240000048000009400000006020000002400005253413

10004000001000100bb7214723ffc13901343df4b9c464ebf

7ef4312b0ae4d31db04a99673e8163768cc0a2a7062e731d

beb83b869f0509bf8009e90db5c8728e840e782d2cf928dae

35c2578ec55f0d11665a30b37f8636c08789976d8ee9fe9a5

c4a0435f0821738e51d6bdd6e6711a5acb620018658cce93

df37d7e85f9a0104a5845053995ce8

Public key token is 2dc940d5439468c2

创立好了公钥/私钥对,创立强命名过程集就很轻率了。只必需把System.Reflection.AssemblyKeyFileAttribute个性加入到源代码中就能够了:?[assembly:AssemblyKeyFile("MyCompany.keys")]

解释:公钥/私钥对文件的伸展名能够是任意的(也能够未曾),因为编译的时候都是以元数据的款式读取的。

2. 过程集的安排措施

一个过程集有两种安排措施:

a) 私有措施

和利用过程安排在统一目录下的过程集称作私有安排过程集。弱命名过程集只能举行私有安排。

b) 大局措施

大局安排措施将过程集安排在一些CLR已确知的地方,当CLR搜查过程集时,它会懂获得这些地方去找。强命名过程集既能够举行私有安排,也能够举行大局安排。

3. 如何安排强命名过程集(Strong Name Assembly)和GAC

a) GAC的观念

万一一个Assembly要被多个利用过程拜会,那么他就定然放在一个CLR已确知的目录下,并且CLR在探测到有对该Assembly的引用时,它定然能积极到该目录下寻找这个过程集。这个已确知的目录称作GAC(Global Assembly Cache),即便大局过程集缓存。它等闲位于下面的目录下:<探路者System Drive>:/Windows/Assembly/GAC。

GAC的作用即便提供给CLR一个已知的判定的目录去寻找引用的过程集。

b) GAC的内部构造

GAC是一个特异的构造化的目录,用Windows Explorer博览你会感受它只是一个包括许多过程集的等闲目录。其实不是这么的,在号召行下察看,你会觉察它切实上包括许多子目录,子目录的名字和过程集的名目是雷同的,但它们都不是切实的过程集,切实的过程集位于过程集名对应的目录下。例如进去GCFWK子目录,我们会觉察其中又有许多的子目录。机器内每一个安装到GAC的GCFWK.dll在GCFWK中都会有一个子目录。

这里只 有一个目录阐明只有一个版本的GCFWK过程集被安装。切实的过程集保留在每一个对应的版本目录下。目录的名目以下划线的形式瓜分为“(Version)_(Culture)_(PublicKeyToken)”。

GCFWK的语言文化消息为netture,就表示为0.0.0__bf5779af662fc055”。 表示惬含义是: “GCFWK, Version=1.0.0.0, Culture=neutral,PublicKeyToken=bf5779af662fc055” 万一语言文化消息为”ja”,就表示”1.0.0.0_ja_bf5779af662fc055”

表示惬含义是: “GCFWK, Version=1.0.0.0, Culture=ja, PublicKeyToken=bf5779af662fc055”

c) 安排强命名过程集到GAC

GAC包括许多子目录,这些子目录是用一种算法来发生的,我们良好不要手动将过程集拷贝到GAC中,相反,我们应利用工具来告终这么的工作。因为这些工具懂得GAC的内部构造J

在开发和测验中,最常用的工具即便GACUtil.exe。 在GAC中登记过程集跟COM登记差不多,但相对更轻率:

1. 把过程集增加到GAC中: GACUtil /i sample.dll (参数/i是安装的含义)

2. 把过程集移出GAC GACUtil /u sample.dll (参数/u就移除的含义)

当心:不能将一个弱命名过程集安装到GAC中。

万一你试图把弱命名过程集加入到GAC中,会收到讹谬消息:”

Failure adding assembly to the cache: Attempt to install an assembly without a strong name”

d) 强命名过程集的私有安排

把过程集安装到GAC有几个利益。率先,GAC使得许多过程能够分享过程集,这从大局上收缩了利用的物理内存;其次,我们很轻率将一个新版的过程集安排到 GAC中,并穿越一种公布者计策(差不多即便一种重定向措施,例如将本来引用版本为1.0.0.0过程集的过程,穿越改动它的搭配文件,转而让过程去引用版本为2.0.0.0的过程集)来利用新版本;最后,GAC还供给了对不同版本过程集的并存(side-by-side)管教措施。然而,GAC的平安计策等闲只批准管教员改动,同时,向GAC中安装过程集也摧毁了.NET框架的容易拷贝安排的允诺。

除非向GAC可能以私有安排措施安排强命名过程集之外,我们还能够将强命名过程集安排在仅为一小局部过程懂得的某个任意目录下。搭配每一个利用过程的 XML搭配文件,让它们指向一个公有目录,这么,在运行时,CLR将懂获得哪里去找这个强命名过程集。但这么又有可能会引起”DLL Hell”的问题,因为未曾哪个过程能够扼制这个过程集何时被卸载。这在.NET中也是不被激励的。八个容易的问题,穿插在同随时,业绩了一道“众口难调”的混杂的问题。

查看一个dll是否是强命名[C#]的更多相关文章

  1. 如何使一个你没有源代码的DLL文件变为强命名的DLL

    转载: 有时候你会需要一个DLL是强命名的,比如你想把这个文件放到GAC里面.如果这是一个第三方的DLL,你没有源代码,这会是一件比较麻烦的事情.有一个方法可以解决这个问题. 在VS.NET的命名行窗 ...

  2. 为已编译的DLL附带强命名

    在我们开发的过程中,会经常调用其他人写好的DLL类库,由于种种的原因,不管是公司规定,还是个人习惯等等的原因,有时候需要调用各个类库直接邀请必须强命名. 但是我们临时也无法找到源代码进行重新编译等事情 ...

  3. .NET中查看一个强命名程序集(*****.dll)的PublicKeyToken的方法

    使用命令行工具SDK Command Prompt,键入:SN -T C:\*****.dll  (dll文件所在的路径) 就会显示出该dll具体的PublicKeyToken数值. 如果该程序集没有 ...

  4. 使用VS2010命令提示窗口操作程序集强命名

    说明:文中示例均以将文件置于D盘根目录(D:\)下为例. 一.查看程序集是否具有强命名 sn -T d:\LicBase.dll 若有则会显示PublicKeyToken值,反之不会. 二.给无强命名 ...

  5. 多个DLL合并成一个DLL

    多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-425 ...

  6. 怎样从一个DLL中导出一个C++类

    原文作者:Alex Blekhman    翻译:朱金灿 原文来源: http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx 译 ...

  7. 为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?

    项目中有一个.NET Core控制台项目叫ConsoleCoreApp,写好代码后准备发布: 结果发布后生成的是一个dll文件...为不是一个exe的可执行文件: 后来了解到.NET Core的项目分 ...

  8. 检测一个DLL文件是x64还是x86

    对于一个DLL,我们如何判定其是32位的还是64位的,或者是any cpu的platform? Visual Studio提供了一个很好的工具:corflags,这个是内嵌到Developer Com ...

  9. SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码

    参考文章:微信公众号文章 在sql中怎么查看一个字符的ascii编码,so easy !! select ASCII('a') SELECT CHAR(97) charNum SELECT UNICO ...

随机推荐

  1. springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'

    项目是使用spring MVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [/exam3/welcome] in Dis ...

  2. phpStudy启动失败提示:缺少VC9运行库

    镜像是官方2008 64位中文版 按照提示安装了VC9以后 软件依旧无法运行阿帕奇,提示缺少VC9运行库 这是因为:64位系统除了要装64位的运行库也要装32位的运行库 32位的VC9运行库下载:ht ...

  3. 关于Unity中红外线瞄准的效果实现

    今天做一个FPS游戏的时候,由于我做的是第三人称的射击,所以需要一个枪的红外线瞄准的效果. 一开始我在枪上挂一个很细很长的聚光灯,瞄准远处物体的时候,看起来有点红外线的样子,但是靠近之后光线就变成一个 ...

  4. VMware Ubuntu NAT 不能上网

    在VMware中配置NAT,控制面板->网络和Internet->网络连接,设置对应的VMware网卡为DHCP. ubuntu虚拟机中配置网卡为DHCP.获取不到ip. 参考链接: ht ...

  5. e822. 监听JScrollPane的滚动

    A scrollbar in a scroll pane fires adjustment events whenever its value changes. // Create a scrolla ...

  6. unity-------------------打包BuildAssetBundles的使用

    unity5打包机制下,一种资源打ab和资源管理的方案.1.打ab: 1.设置平台 2.清楚所有资源的assetbundlename: string[] abNameArr = AssetDataba ...

  7. WEB网页监控系统的设计框架思路具体解释

    提示:也能够直接在LCD上显示摄像头数据.这个參考luvcview源代码.设计思路思将YUV或者MJPEG格式的数据转换成RGB格式的数据,然后实现图片的缩放,图像缩放算法:点击这里!,然后写到fra ...

  8. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  9. mothur 计算稀释性曲线

    在微生物分析中,经常使用稀释性曲线来评估测序量是否足够:可以使用mothur 这个软件来完成 rarefaction.single 命令用来做稀释性曲线,既可以对单个样本单独分析,也可以一次对多个样本 ...

  10. VS 调试 无法启动IIS Express Web 服务器(进程不存在)

    拷贝VS2015项目 出现无法启动IIS Express Web 服务器 一.把你们拷贝刀本机的解决方案文件中的隐藏文件夹.vs删除掉 重新生产解决方案就可以启动iis express了.