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

Par*_*ram 2 c# asp.net

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

我不确定这是否有效,但这是我在一次采访中必须面对的问题.

Adr*_*tti 5

简短回答:当然,他们可以在GAC中共存.你不能拥有的就是同时使用它们.

答案:程序集使用其显示名称位于GAC中.可以注册两个具有相同名称的不同程序集,但只有最后一个注册的程序集对应用程序可见.

在您的情况下(不同的公钥),如果您在应用程序中引用了较旧的程序集,则可能会出现异常:引用将被解析为较新的程序集,但公钥将不匹配,然后程序集将不会加载.

编辑:这种行为不是来自程序集签名本身(签名是第一级弱安全性和使程序集唯一的方式),它只是GAC的实现方式.它甚至没有固定在石头上,这种行为甚至可能在未来发生变化.现在只考虑避免这种奇怪的情况......