如何强烈命名程序集以使其具有公钥标记

Vac*_*ano 4 .net .net-4.0 visual-studio-2010 visual-studio

我正在尝试创建一个项目模板向导.为此,我需要一个带有公钥标记的强名称程序集.

我去了这里:http: //msdn.microsoft.com/en-us/library/ms247123.aspx并按照步骤操作.

我在程序集中最终得到一个.pfx文件.但是当我清理并构建dll时,它上面没有公钥标记.

(我通过运行'sn -t EventWizard.dll'验证了我的结果:

无法将密钥转换为令牌 - 程序集'(null)'的公钥无效.

所以我认为我没有得到公钥令牌.我该怎么办?

更新:这是我的签名标签:

签署截图

小智 26

我也面对这个.

解决方案非常简单 - 参数区分大小写.

sn -T <yourassembly.dll>
Run Code Online (Sandbox Code Playgroud)


Vac*_*ano 7

所以它毕竟是强烈的命名.但是需要以不同的方式使用sn.exe工具来查看我正在寻找的值(PublicKeyToken).

如果我跑这个:

sn -e EventWizard.dll temp.txt
sn -t temp.txt
Run Code Online (Sandbox Code Playgroud)

然后它工作得很好.


Nee*_*raj 7

我也面临着这个问题.

解决方案非常简单 - 参数区分大小写.

//Does not work
sn -t yourassembly.dll

//Works
sn -T yourassembly.dll
Run Code Online (Sandbox Code Playgroud)


zab*_*bby 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
Run Code Online (Sandbox Code Playgroud)

这会将公钥复制到新文件中

sn -tp MyKey.PublicKeyOnly.snk
Run Code Online (Sandbox Code Playgroud)

这将输出类似: Public key is 0024000004800000940000000602000000240000525341310004000001000100cfb8bc23b86a08 e70d021dd53d3b0293e716e71015870bdcc58a0 231a4228618851a83e06077f5a44f42beb2baf3 56ad2d344521a96b0081ed0f25f9227523e3625eda524efe1cf2e1e5e41f3693a76ec52347684b 8129a4bb2d5fc49 681adf33da0eecc4f81f011af4539d12abe1b4e760b5ce32d766db1012d4402 8381f0b4

公钥令牌是 2ff2b71993eeff95

复制公钥值并更新InternalsVisibleTo:

[程序集:InternalsVisibleTo("MyProject.Domain.Tests,PublicKey= 0024000004800000940000000602000000240000525341310004000001000100cfb8bc23b86a08 e70d021dd53d3b0293e716e71 015870bdcc58a0231a4228618851a83e06077f5a44f42beb2baf3 56ad2d344521a96b0081ed0f25f9227523e3625eda524efe1cf2e1e5e41f3693a76ec52347684b 8 129a4bb2d5fc49681adf33da0eecc4f81f011af4539d12abe1b4e760b5ce32d766db1012d4402 8381f0b4")]