怎么查看程序集的publickeytoken?这里有几种简单方法。

吉云

今天跟大家聊聊这个 `publickeytoken` 的事儿。平时捣鼓代码,有时候还真就绕不开它,特别是在配置某些东西或者引用特定版本的库时,总得用到这串字符。我这儿就把自己怎么搞定它的过程给大家捋一遍。

记得有一次,我需要在一个配置文件里指定一个程序集的完整名称,里面就要求必须带上这个 `publickeytoken`。当时我对着那个 `.dll` 文件,有点懵,这玩意儿藏在哪儿?

摸索工具

怎么查看程序集的publickeytoken?这里有几种简单方法。

我先是琢磨着,这肯定是微软自家开发工具链里的东西。打开我的 Visual Studio,翻了翻菜单,没直接找到。后来想起来,VS 装完之后,好像会带一些专门的命令行工具。我就去开始菜单里找,果然,在 Visual Studio 的文件夹下面,找到了一个叫 “Developer Command Prompt for VS” (或者类似名字,不同版本可能叫法有点差异)的东西。

直觉告诉我,就是它了!

动手查找

打开这个黑乎乎的命令行窗口后,我就开始回忆以前好像用过的一个命令,叫 `sn`,好像是 Strong Name 的缩写。我试着敲了 `sn /?` 看了下帮助,果然有戏。

里面有个参数 `-T` 或者 `-Tp` 看起来就是用来显示公钥令牌(PublicKeyToken)的。

sn -T "你的dll文件完整路径"

怎么查看程序集的publickeytoken?这里有几种简单方法。

特别注意: 这里的 `"你的dll文件完整路径"` 必须换成你那个 `.dll` 文件实实在在放在电脑里的位置,比如 `C:\MyProject\bin\Debug\*` 这种。路径如果带空格,最好用双引号给它包起来,免得出错。

敲完回车,等了一下,命令行就输出了一堆信息,其中一行清楚地写着:

Public key token is xxxxxxxxxxxxxxxx

那串十六进制的字符 `xxxxxxxxxxxxxxxx` 就是我要找的 `publickeytoken` 了。当时就觉得,搞定了!

要是没找到?

不过有时候运气不输完命令,它可能会提示说这个程序集没有强名称(strong name)。这就意味着这个 `.dll` 文件在编译的时候,没有给它签名,自然也就没有 `publickeytoken`。

怎么查看程序集的publickeytoken?这里有几种简单方法。

遇到这种情况咋办?如果这个库是你自己写的,或者你有源代码,那就好办了。

自己动手,丰衣足食:给程序集签名

我就得给它加上签名。过程也不复杂:

  • 第一步:生成密钥文件。还是在那个开发者命令行窗口里,用 `sn` 命令生成一个密钥文件(`.snk` 文件)。命令大概是这样:
    sn -k "C:\MyProject\*"
    这会在 `C:\MyProject\` 目录下生成一个叫 `*` 的文件。路径和文件名你自己定就行。
  • 第二步:项目里设置签名。打开 Visual Studio,找到你的那个类库项目。右键点击项目,选“属性”。在属性页里找到“签名”(Signing)这一项。
  • 怎么查看程序集的publickeytoken?这里有几种简单方法。

  • 第三步:勾选并指定密钥。把“为程序集签名”(Sign the assembly)这个复选框勾上。然后在下面的下拉框里选择“浏览...”,找到你刚才用 `sn -k` 命令生成的那个 `.snk` 文件(比如 `C:\MyProject\*`),选中它。
  • 第四步:重新编译。设置好了之后,保存项目属性,然后重新生成(Rebuild)整个项目。

这样编译出来的 `.dll` 文件,就带上了强名称签名。

再次验证

为了确保万无一失,我通常会再回到那个开发者命令行窗口,用同样的 `sn -T` 命令再检查一遍刚刚重新生成的 `.dll` 文件。

怎么查看程序集的publickeytoken?这里有几种简单方法。

sn -T "C:\MyProject\bin\Debug\*"

这回它就应该能顺利显示出 `publickeytoken` 了。

基本上,这就是我获取或者给程序集加上 `publickeytoken` 的一套流程。看起来步骤不少,但实际操作起来,只要找到那个开发者命令行工具和记住 `sn` 这个命令,就挺顺手的。希望能帮到有需要的朋友们。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]