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

时间:2013-09-24 03:28:19

标签: c# visual-studio-2012 strongname

使用时

  1. DLL上的C#Strongnames和
  2. 使用InternalsVisibleTo标签和
  3. 当公钥使用SHA256(或SHA512)
  4. 我们注意到编译过程失败,好像永远都没有声明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

1 个答案:

答案 0 :(得分:2)

this magazine article中明确提到:

  

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

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