使用时
- DLL 上的 C# Strongnames 和
- 使用 InternalsVisibleTo 标签和
- 当公钥使用 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/