两个具有相同名称,相同版本但公钥不同的程序集

本文关键字:版本 公钥 程序集 两个 | 更新日期: 2023-09-27 18:13:12

GAC中是否存在两个名称相同版本相同公钥不同的程序集??

我不确定这个问题是否有效,但这是我在一次面试中不得不面对的。

两个具有相同名称,相同版本但公钥不同的程序集

简短的回答:它们当然可以在GAC中同时存在。你不能同时使用它们。

长答:程序集在GAC中使用它们的显示名称。可以注册两个具有相同名称的不同程序集,但只有最后注册的一个对应用程序可见

在你的情况下(不同的公钥),你可能会有一个异常,如果你在应用程序中引用旧的程序集:引用将被解析为新的,但公钥不匹配,那么程序集将无法加载。

EDIT:此行为不是来自程序集签名本身(签名是第一级弱安全性和使程序集唯一的一种方法),它只是GAC的实现方式。它甚至不是固定在石头上的,这种行为可能在将来甚至会改变。

显然,这是可能的(强调我的):

公钥令牌用于使程序集名称唯一 。因此,两个强命名程序集可以具有相同的PE文件名,但是CLI将它们识别为不同的程序集。Windows文件系统(FAT32和NTFS)只识别PE文件名,所以两个具有相同PE文件名(但不同区域性、版本)的程序集或公钥令牌)不能存在于同一个Windows文件夹中。来解决在CLI中介绍GAC (Global Assembly Cache),即全局程序集缓存运行时将其视为单个文件夹,但实际上已实现使用嵌套文件系统文件夹

可以,你的程序集引用可以指定你想引用的程序集的公钥,所以它们可以有相同的名称,版本,区域性,任何东西,只要你指定了公钥它就会知道你想用哪个。