8

使用时

  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")]

我们坚持在Properties\AssemblyInfo.cs项目的内部MyProject

问题:如何在强名过程中使用 SHA256 或更好的?

编辑:或者这是 VS2012 工具中的错误?

平台、工具:VS2012(更新 3)、.NET 4.5、Windows 8 x64

4

1 回答 1

2

这篇杂志文章中非常明确地提到了这一点:

各种机制用于实现数字签名。.NET Framework 中强名称的当前实现依赖于 RSA 公钥算法和 SHA-1 哈希算法。

大概您希望发生的事情是,当 CLR 检查强名称时,您用于 sn.exe 的命令行参数也对 CLR 可见。那是不存在的。

于 2013-09-24T23:21:21.973 回答