我可以使用 AppDomain.AssemblyResolve 事件来重定向失败的程序集加载吗?
默认情况下,我的应用程序引用混合模式 DLL,因此该 DLL 既是 32 位又是 64 位。在 32 位系统上,我的应用程序是 MSIL 并加载 32 位 DLL。在 64 位系统上,我的应用程序加载 64 位。
然而,在 64 位系统上,在我引用的旧版本程序集中,他们仅创建了 32 位版本。所以我无法加载这个。我正在考虑动态执行此操作,理想情况下我希望我的 MSIL 应用程序在 64 位模式下加载 32 位 DLL。这可能吗?
另外,最好将其解析为与我引用的版本不同的版本。
任何帮助表示赞赏。
By default, my application references a mixed mode DLL, so this DLL is both 32 and 64 bit. On a 32 bit system, my app is MSIL and loads the 32 bit DLL. On a 64 bit system, my app loads the 64 bit.
However on a 64 bit system, in an older version of the assembly that I am referencing, they only created a 32 bit version. So I fail to load this. I was looking at doing it dynamically, and ideally I would want my MSIL app in 64 bit mode to load the 32 bit DLL. Is this possible?
Also it would be nice to resolve it to a different version than what I have referenced as well.
Any help appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法将 32 位 DLL 加载到 64 位进程中。 “任何 CPU”程序集都可以工作,因为 JIT 在执行之前处理 IL 编译,创建适当类型的本机映像; CPU 特定的程序集不支持不同类型的 JIT。
这是 Windows 限制,而不是 CLR 限制。
You cannot load 32-bit DLLs into 64-bit processes. "Any CPU" assemblies work because the JIT handles the IL compilation before execution, creating a native image of the appropriate type; CPU-specific assemblies don't support JITing to different types.
This is a Windows limitation, not a CLR limitation.