- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于性能原因,我试图将我的程序集放在 GAC 中。它有一些绑定(bind)到 AssemblyResolve 事件的代码。但是,由于 GAC 处理我的程序集,当解析源来自我自己的 GAC 程序集时,不再命中 AssemblyResolve 事件处理程序。
换句话说,我的 GAC 程序集引用了 XYZ.dll。我的 GAC 程序集不必单独重新分发它,而是将 XYZ.dll 存储为在启动时加载的嵌入式资源。程序集解析处理程序返回动态加载的 XYZ.dll 实例。但是,既然我的程序集是 GAC 的,则 AssemblyResolve 事件根本不会为 XYZ.dll 触发。
我猜这与加载上下文不同有关......但我不确定如何处理它。既然我的程序集是 GAC 的,我如何才能解决工作?
最佳答案
当然,这行不通。 GAC 是一种 DLL Hell 对策,它确保任何依赖于特定 DLL 版本的应用程序都能获得他们要求的特定版本的 DLL。始终如一,无论什么过程要求它。允许在进程的探测路径中解决 GAC-ed DLL 的依赖关系将以最糟糕的方式带回 DLL Hell。它完全违背了 GAC 提供的保证,现在不能信任 DLL 以始终如一地工作。
这也不仅仅是微妙的,一个基本可怕的场景是,在 GAC-ed 的程序集中定义的派生类的基类在依赖程序集中定义。您希望工作的内容将允许完全不同的基类实现。如果基类没有太大不同,则抖动不会下降的合理可能性。运行时的实际结果非常悲惨,执行错误的代码几乎没有办法诊断原因,尤其是对于没有调试器的用户。 DLL Hell 是用户的噩梦,最没有能力诊断和解决问题的人就是受害者。
CLR 断然拒绝让您以这种方式射击用户的脚。是的,加载上下文是关键,Fusion 是底层 api。
关于.net - 用于 GAC 程序集的 AssemblyResolve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448312/
我现在正在为 AssenblyResolve 事件苦苦挣扎一段时间。我搜索了 stackoverflow 并进行了其他谷歌搜索,并尝试了所有我认为相关的内容。以下是更接近我的问题的链接(在我看来):
我需要动态解析从一个类库到另一个类库的程序集引用。类库是从 PowerShell 脚本加载的,因此在可执行文件中查找依赖程序集的默认 .NET 行为直接失败,因为可执行文件本身就是 PowerShel
我真的很奇怪为什么 assemblyResolver 不工作?我也不能用 foreach(deCompressBinaries 中的 byte[] 二进制文件) ApplicationHost.Loa
我有一个应用程序,它在自身内部嵌入(通过 BuildAction:嵌入式资源)引用的程序集(称为 ClassLibrary1)并在 AppDomain.CurrentDomain.AssemblyRe
实际上,我试图在我的解决方案中实现某种“静态链接”程序集。所以我尝试了以下方法: 使用 CopyLocal = false 添加对我的程序集的引用 使用“添加为链接”将 .dll 文件本身添加到我的解
我有两个程序集:App 和 AddOn。 App 引用 AddOn,但 CopyLocal 设置为 false,因为 AddOn 将由 App 动态加载。 这是 AddOn 中的代码: namespa
出于性能原因,我试图将我的程序集放在 GAC 中。它有一些绑定(bind)到 AssemblyResolve 事件的代码。但是,由于 GAC 处理我的程序集,当解析源来自我自己的 GAC 程序集时,不
我目前正在使用以下代码: AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { var name = args.Name
我想附加到 AppDomain.AssemblyResolve event在“Windows Store”应用程序中。但是 AppDomain 不存在。 是否有替代方法来获得相同的功能? 最佳答案 在
在我的 ASP.NET 应用程序中,有 MyAssembly.CustomIdentity 类和 .NET 运行时 tries to serialize that class 。在序列化期间,它会抛出
我正在尝试使用 AppDomain.AssemblyResolve 事件来处理异常,同时解析运行时加载的某些 dll 的程序集 (SerializationException for dynamica
我正在尝试使用 CurrentDomain.AssemblyResolve 事件来加载标记为嵌入式资源的 DLL。具体来说,我的问题来自于我试图将程序集用作子类的事实,如下所示: #define BR
我有一个 WPF 应用程序,我订阅了事件 AppDomain.AssemblyResolve (只要运行时没有找到程序集,就会引发此事件),并且我注意到它被多次调用尝试解析 MyAssembly.re
在找到关于程序集解析 (AppDomain.CurrentDomain.AssemblyResolve asking for a .resources assembly?) 的最后一个问题的答案后,我
这个真的让我很生气。开始了: 我的目标是在运行时加载包含嵌入式 aspx、ascx 等的程序集。我还希望不锁定磁盘上的程序集文件,这样我就可以在运行时更新它而不必重新启动应用程序(我知道这将保留以前的
我已经处理了 AssemblyResolve 事件,但我仍然收到 FileNotFoundException。我已经在类型初始值设定项中订阅了事件,并在 Main 方法中调用了 Assembly.Lo
我试图通过将 AppDomain 及其 AssemblyResolve 事件包装在一个类中来自定义程序集解析过程。我的 ClassLoader 的简化版本如下。我遇到的问题是,当事件 Assembly
我正在尝试使用一些解析器来处理解析失败,我发现 AppDomain.CurrentDomain.AssemblyResolve 仅在我使用类似 AppDomain.CurrentDomain.Load
我的情况是 AppDomain.CurrentDomain.AssemblyResolve为已经使用 Assembly.Load(myAssemblyMemStream.ToArray()) 加载到当
我想使用内存从 WCF 加载我的程序集。一切正常 时间: AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Curr
我是一名优秀的程序员,十分优秀!