首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAC'd程序集的AssemblyResolve

GAC'd程序集的AssemblyResolve
EN

Stack Overflow用户
提问于 2012-02-26 05:38:40
回答 1查看 1.1K关注 0票数 2

出于性能原因,我正在尝试将我的程序集放在GAC中。它有一些绑定到AssemblyResolve事件的代码。然而,由于GAC‘’ing我的程序集,当解析的源来自我自己的GAC‘’d程序集时,AssemblyResolve事件处理程序不再被命中。

换句话说,我的GAC程序集引用了XYZ.dll。我的GAC程序集将XYZ.dll存储为在启动时加载的嵌入式资源,而不必单独重新分发它。程序集解析处理程序返回动态加载的XYZ.dll实例。但是,现在我的程序集已经GAC了,XYZ.dll的AssemblyResolve事件根本不会触发。

我猜这与加载上下文是different...but有关,我不确定如何处理它。既然我的程序集是GAC的,我怎么才能让解析工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-26 05:45:33

当然,这不起作用。GAC是一个DLL地狱对策,它确保任何依赖于特定版本的DLL的应用程序都能获得他们所要求的特定版本的DLL。始终如一,无论什么进程需要它。允许在进程的探测路径中解析GAC-ed DLL的依赖项将以最糟糕的方式带回DLL地狱。它完全破坏了GAC提供的保证,DLL现在不能被信任以一致的方式工作。

这不仅仅是微妙的,一个基本上可怕的场景是,在GAC-ed的程序集中定义的派生类的基类是在依赖程序集中定义的。您希望的工作将允许一个完全不同的基类实现。如果基类没有太大的不同,抖动不会下降的可能性是合理的。运行时的实际结果相当糟糕,错误的代码执行时几乎没有方法来诊断原因,特别是对于没有调试器的用户。DLL地狱是用户的噩梦,最不能诊断和修复问题的人是受害者。

CLR断然拒绝让你以这种方式射杀用户。是的,加载上下文是关键,Fusion是底层api。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9448312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档