使用SHA256时,带有InternalsVisibleTo标记的StrongNaming失败

Dee*_*101 8 c# strongname visual-studio-2012

使用时

  1. DLL上的C#Strongnames和
  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
Run Code Online (Sandbox Code Playgroud)

我们将项目内部暴露给它的测试项目的方式是:

[assembly: InternalsVisibleTo("MyProjectTest, PublicKey=LongPublicKeyHere")]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Han*_*ant 2

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

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

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

  • 谢谢!有趣的是,在 CLR 文章*之前*几个月,NIST 发布了从 SHA1=&gt;SHA2 系列切换的指南 (http://csrc.nist.gov/groups/ST/hash/policy_2006.html)。由于 CLR 文章和 NIST 指南都是 7 年前的文章,看来 .NET 在这方面需要一次姗姗来迟的升级! (2认同)