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

标签 c# visual-studio-2012 strongname

使用时

  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

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

[assembly: InternalsVisibleTo("MyProjectTest, PublicKey=LongPublicKeyHere")]

我们把它贴在 Properties\AssemblyInfo.cs 里面的 MyProject项目。

问题:strongname进程中如何使用SHA256或更好的算法?

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

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

最佳答案

this magazine article 中明确提到了它:

Various mechanisms are used to implement digital signatures. The current implementation of strong names in the .NET Framework relies on the RSA public key algorithm and the SHA-1 hash algorithm.

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

关于c# - 使用 SHA256 时,带有 InternalsVisibleTo 标记的 StrongNaming 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18972500/

相关文章:

c# - 如何将强名称公钥 (snk) 转换为 <RSAKeyValue>?

.net - 如何调试 "strong name validation failed"?

c# - 这个 IDisposable 实现是否正确?

c# - 为什么不能将 Dictionary<T1, List<T2>> 转换为 Dictionary<T1, IEnumerable<T2>>?

visual-studio - TODO 的自定义颜色和自定义 TODO 不同 resharper

visual-studio - 如何在 VS2012 中禁用 PerfWatson?

c# - 为什么建议在开源存储库中包含用于程序集签名的私钥?

c# - 如何创建动态表达式,如 ( x, y ) => DateTime.Compare( y.EFFECTIVE_DATE, x.EFFECTIVE_DATE )

c# - WinForms 打印到默认打印机,即使它不可用/连接

sql-server - 如何将数据包含在 DacPac 中