考虑两种不同发布者程序集中的两个公钥映射到同一公钥标记的情况(虽然程序集的名称,版本和文化也相同)。
当CLR尝试解析只能引用上述其中一个的AssemblyRef条目时,它是否能够准确知道应该加载哪一个?
我确定没有什么可以运气的,那么它将如何运作呢?
也许这是一个权衡,有更短的密钥,节省空间与碰撞的风险?
来源:CLR通过C#,第4版,第71页(头)。
答案 0 :(得分:1)
当程序集存储在GAC中时,没有歧义,一个程序集将替换另一个程序集。所以你会得到最后登记的那个。
如果它没有存储在GAC中,那么CLR将只根据显示名称找到一个程序集。它在探测路径中的目录中搜索文件名与文件扩展名为.exe或.dll的显示名称匹配的文件。它找到的第一个完成搜索,如果AssemblyName的其余部分不匹配则完成kaboom。您将很难在同一目录中存储具有相同显示名称的程序集,但技术上可以有一个名为.exe而另一个名为.dll。首先找到.exe。
这一点在MSDN Library article中都有很好的记录。