如果在同一个 AppDomain 中加载了多个版本,WPF 无法选择正确的 DLL

Posted

技术标签:

【中文标题】如果在同一个 AppDomain 中加载了多个版本,WPF 无法选择正确的 DLL【英文标题】:WPF unable to choose right DLL if several versions are loaded within same AppDomain 【发布时间】:2014-11-06 15:36:57 【问题描述】:

我们正在开发插件,以添加到一个巨大而出色的软件中。我们经常重复使用相同的 WPF 控件,因此我们将它们打包并为每个控件创建单独的程序集。

有时,我们需要在同一个软件实例中加载 2 个不同的插件。此时,如果 2 个插件使用相同的可重用控件但具有不同的 DLL 版本,WPF 似乎无法选择正确的一个。两个 DLL 均已正确加载(使用 Process Explorer 查看)。

我们已经尝试过的:

绑定重定向 程序集重定向 覆盖的程序集解析

是否有任何解决方案向 WPF 指示它需要为 XAML 中请求的命名空间选择同一个 DLL 的哪个版本?我们能否以某种方式强制使用最新的(这对我们有用)?

【问题讨论】:

【参考方案1】:

看看我的 SharpDevelop 提交:https://github.com/icsharpcode/SharpDevelop/commit/b3ea4a0efb7e3b8e083f8be40ea6f7e03ff44604

我通过使用自定义“InitializComponent”调用解决了这个问题! (“SpecialInitializeComponent”)并使用特殊合并的 ResourceDictionarys:VersionedAssemblyResourceDictionary!希望对你有帮助!

【讨论】:

我会在下个月测试它并尽快返回结果。

以上是关于如果在同一个 AppDomain 中加载了多个版本,WPF 无法选择正确的 DLL的主要内容,如果未能解决你的问题,请参考以下文章

ApplicationManager.CreateObject 无法在新的 AppDomain 中加载程序集

.Net 同一个程序集的两个版本在一个 AppDomain 中加载时是不是存在潜在问题?

C# 在 appdomain 调用方法中加载 dll,而不会再次加载 dll

将多个程序集版本加载到多个 AppDomain 中

无法在新的 appDomain 中加载程序集

无法在 appDomain 中加载程序集