.NET中的程序集是如何解析的?我的意思是,具有完全限定名称的程序集是如何解析的。我对公钥/私钥令牌和强命名感到困惑。谢谢。
编辑:我也读过关于延迟签名之类的东西。人们真的会使用它吗?(是否有人实际上使用了延迟签名?)谁生成用于签署程序集的密钥?非常抱歉如果我问了太多问题。但是,我对整个事情感到困惑。
.NET中的程序集是如何解析的?我的意思是,具有完全限定名称的程序集是如何解析的。我对公钥/私钥令牌和强命名感到困惑。谢谢。
编辑:我也读过关于延迟签名之类的东西。人们真的会使用它吗?(是否有人实际上使用了延迟签名?)谁生成用于签署程序集的密钥?非常抱歉如果我问了太多问题。但是,我对整个事情感到困惑。
AppDomain
的"AssemblyResolve
"事件。当程序集无法通过"传统"方法解析时,将引发此事件。
到目前为止,最简单的机制是处理 "AssemblyResolve" 事件。
总之,解析器会在当前目录或全局程序集缓存中查找,处理策略,最后允许自定义解析。
程序集的解析可能涉及多个步骤,具体取决于它正在尝试加载的程序集所在的位置(GAC、应用程序基础文件夹、子文件夹或另一个与您的基础应用程序文件夹不同的文件夹)。
这是一篇关于如何指定 .Net 查找程序集的好文章。 MSDN 文章
如果您想让运行时解析一个未存储在应用程序基础文件夹或 GAC 中的程序集,则需要注册 AppDomain 事件,该事件在找不到程序集时引发。然后,您可以通过检查文件是否存在于其他位置并使用 Assembly.LoadFrom(thePath) 返回它来对该事件做出反应。
进一步补充这个答案的是这个链接,它应该很好地为您总结整个带有密钥的强命名:Strong Naming - keys etc..
如果有任何问题,请随时提问!