使用
- DLL 和 上的 C# 强名称
- 使用 InternalsVisibleTo 标签和
- 当公钥使用 SHA256(或 SHA512)时
我们注意到编译过程失败,就好像从未声明过InternalsVisibleTo
标签一样。我们得到的错误是MyInternalClass is inaccessible due to its protection level <snip>
当公钥使用 sha1(在上面的步骤 #3 中)时,编译过程完美运行,没有问题,并且内部结构正确暴露给测试项目。我们创建强名称密钥的方式是
sn -k 4096 SignKey.snk
sn -p SignKey.snk SignKeyPublic.snk sha256
sn -tp SignKeyPublic.snk
我们将项目的内部公开给测试项目的方式是:
[assembly: InternalsVisibleTo("MyProjectTest, PublicKey=LongPublicKeyHere")]
我们把它贴在MyProject
项目的PropertiesAssemblyInfo.cs
里。
问:如何在强名称过程中使用 SHA256 或更高版本?
编辑:或者这是VS2012工具中的错误?
平台, 工具: VS2012 (更新 3), .NET 4.5, 视窗 8 x64
这篇杂志文章中非常明确地提到:
使用各种机制来实现数字签名。.NET Framework 中强名称的当前实现依赖于 RSA 公钥算法和 SHA-1 哈希算法。
大概您希望发生的是,用于 sn.exe 的命令行参数在检查强名称时对 CLR 也是可见的。 那不存在。