你能在GAC中安装延迟签名的程序集吗?CLR通过c#第4版

本文关键字:程序集 CLR 通过 4版 GAC 安装 延迟 | 更新日期: 2023-09-27 18:06:34

我正在阅读CLR via c# (Fourth Edition),在第三章中关于强命名汇编作者说:

当编译器或AL.exe检测到您正在延迟签名程序集,它将发出程序集的AssemblyDef manifest项,它将包含程序集的公钥。再一次,存在公钥允许将程序集放置在GAC中。它还允许您生成引用此程序集的其他程序集;的引用程序集将在其AssemblyRef元数据表项。在创建结果时程序集,在生成的PE文件中为RSA数字保留空间签名。(该实用程序可以确定需要多少空间公钥的大小。)请注意,文件的内容不会是

此时,生成的程序集没有有效的签名。尝试将程序集安装到GAC将失败,因为a文件内容的散列还没有完成——文件似乎已经完成了

正如你所看到的,在第一段中,他说,当我们使用/delaysign时,程序集的清单将包含public key,这将允许它安装在GAC中。但是在第二段中,他说,由于文件还没有用私钥签名,试图将其安装到GAC将失败。那么,它是什么呢?你能不能安装?

你能在GAC中安装延迟签名的程序集吗?CLR通过c#第4版

好的,我找到了。它将而不是能够安装在GAC中。我延迟签名一个程序集,并试图安装在GAC,我得到了这个错误信息

Failure adding assembly to the cache: Strong name signature could not be verified. Was the assembly build delay-signed?

(以防有人在这里想知道相同的)。可以通过

跳过哈希检查

SN -Vr assembly.dll

,然后你可以安装在GAC,然后重新哈希(或者更确切地说哈希),你可以这样做,

SN.exe -Ra assembly.dll yourStrongNameKey.PrivateKey

我仍然想知道的唯一一件事是,你怎么能从。snk文件中提取这个私钥,似乎没有办法做到这一点。