GAC中是否存在两个名称相同,版本相同但公钥不同的程序集?
我不确定这是否是有效的问题,但这是我在一次采访中必须面对的问题。
答案 0 :(得分:5)
简短回答:当然,他们可以在GAC中一起存在。你不能拥有的就是同时使用它们。
长答案:程序集使用显示名称位于GAC中。可以注册两个具有相同名称的不同程序集,但只有最后一个注册的程序集可见到应用程序。
在您的情况下(不同的公钥),如果您在应用程序中引用了较旧的程序集,则可能会出现异常:引用将被解析为较新的程序集,但公钥将不匹配,然后程序集将不会加载。
编辑:此行为不是来自程序集签名本身(签名是第一级弱安全性和使程序集唯一的方法),它只是 GAC 已实施。它甚至没有固定在石头上,这种行为可能甚至将来也会发生变化。现在只考虑避免这种奇怪的情况......
答案 1 :(得分:1)
显然yes, it is possible(强调我的):
公钥标记用于使程序集名称唯一 。从而, 两个强名称程序集可以具有相同的PE文件名,但是 CLI会将它们识别为不同的程序集。 Windows文件 系统(FAT32和NTFS)只识别PE文件名,所以两个 具有相同PE文件名的程序集(但不同的文化,版本 或公钥标记 )不能存在于同一Windows文件夹中。要解决 这个问题CLI引入了GAC(全局程序集缓存) 通过运行时处理为单个文件夹,但实际上已实现 使用嵌套文件系统文件夹。
答案 2 :(得分:-1)
是的,他们可以,您的程序集引用可以指定您要引用的程序集的公钥,因此它们可以具有相同的名称,版本,文化,任何内容,只要您指定它将知道的公钥您想要使用它。