如何强名称程序集以获得公钥标记

7
我正在尝试创建一个项目模板向导。为此,我需要具有公钥标记的强名称程序集。
我访问了这里:http://msdn.microsoft.com/en-us/library/ms247123.aspx 并按照步骤进行操作。
我最终得到一个.pfx文件。但是当我清理并构建dll时,它没有公钥标记。
我通过运行 'sn -t EventWizard.dll' 来验证,得到以下结果:
“无法将密钥转换为标记--程序集“(null)”的公钥无效。”
因此,我认为我没有得到公钥标记,那么我该如何获得呢?
更新:这是我的签名选项卡:

在签名下拉菜单中选择了什么? - SLaks
@SLaks - 我添加了一张截图。 - Vaccano
应该可以;我不确定哪里出了问题。 - SLaks
@SLaks,感谢您的命名更新...我已经更新了问题以反映这一点。 - Vaccano
@SLaks,很奇怪它不工作...我希望我没有漏掉一个证书或其他东西。 - Vaccano
显示剩余2条评论
4个回答

29
我也遇到了这个问题。
解决方案非常简单 - 参数是区分大小写的。
sn -T <yourassembly.dll>

8

终于成功为程序集进行了强名称。但是,我需要以不同的方式使用sn.exe工具才能查看我想要的值(PublicKeyToken)。

如果我运行以下命令:

sn -e EventWizard.dll temp.txt
sn -t temp.txt

然后它正常运行了。


7
我也遇到过这个问题。
解决方案非常简单——参数区分大小写。
//Does not work
sn -t yourassembly.dll

//Works
sn -T yourassembly.dll

6

此处找到了一个解决方案,可以帮助使用强类型程序集的InternalsVisibleTo。

前往路径:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools(或者sn.exe所在的路径)

sn -p MyKey.snk MyKey.PublicKeyOnly.snk

这将公钥复制到一个新文件中。
sn -tp MyKey.PublicKeyOnly.snk

这将会输出类似以下的内容:

公钥是: 0024000004800000940000000602000000240000525341310004000001000100cfb8bc23b86a08 e70d021dd53d3b0293e716e71015870bdcc58a0231a4228618851a83e06077f5a44f42beb2baf3 56ad2d344521a96b0081ed0f25f9227523e3625eda524efe1cf2e1e5e41f3693a76ec52347684b 8129a4bb2d5fc49681adf33da0eecc4f81f011af4539d12abe1b4e760b5ce32d766db1012d4402 8381f0b4

公钥标记是2ff2b71993eeff95

复制公钥值并更新InternalsVisibleTo:

[assembly: InternalsVisibleTo("MyProject.Domain.Tests, PublicKey= 0024000004800000940000000602000000240000525341310004000001000100cfb8bc23b86a08 e70d021dd53d3b0293e716e71015870bdcc58a0231a4228618851a83e06077f5a44f42beb2baf3 56ad2d344521a96b0081ed0f25f9227523e3625eda524efe1cf2e1e5e41f3693a76ec52347684b 8129a4bb2d5fc49681adf33da0eecc4f81f011af4539d12abe1b4e760b5ce32d766db1012d4402 8381f0b4")]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接