使用 SHA256 时,带有 InternalsVisibleTo 标记的强命名失败



使用

  1. DLL 和 上的 C# 强名称
  2. 使用 InternalsVisibleTo 标签和
  3. 当公钥使用 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 也是可见的。 那不存在。

最新更新