【问题标题】:WPF, multiple versions of third-party controlWPF,多个版本的第三方控件
【发布时间】:2017-09-19 14:01:55
【问题描述】:

我有一个 WPF 应用程序,它在许多项目中使用了各种第三方控件。在其中一个项目中,我需要将特定控件升级到最新版本,同时将其他项目的网格控件与早期版本保持不变。任何人都可以推荐文章,示例代码等,它显示了如何做到这一点?简单地说,我需要做这样的事情:

  • MainAppModule.csproj,引用并部署所有共享 dll 到 ...\lib 文件夹
    • ModuleA.csproj,参考 ThirdParty.dll,v1.0
    • ModuleB.csproj,参考 ThirdParty.dll,v2.0

程序集绑定重定向这里需要什么?如果有,如何设置?

【问题讨论】:

  • “同时让其他项目的网格控件与早期版本保持不变” 对我来说很难解析。您也许可以将xmlns:xxx="blah blah" 用于不同的子控件上的“blah blah”的不同值,但您必须更具体地了解您在此处尝试执行的操作。传达您的 XAML 正在做什么的一种绝对明确的方式是向我们展示您的 XAML。这是与像我这样想要更多澄清的人打交道的黄金标准。代码的唯一充分描述是代码本身。
  • 如果有问题的程序集是强命名的,那么同一进程中同一控件的多个版本应该不会有问题

标签: c# .net wpf redirect .net-assembly


【解决方案1】:

我不知道你所说的程序集绑定重定向是什么意思...

我不确定这是否适合您,因为两个程序集都将具有 same 命名空间...

但您可以使用自定义AppDomain.CurrentDomain.AssemblyResolve 进行尝试。当即将创建或使用 classstruct 并且此类型的程序集当前不可用时,将调用此事件处理程序。 因此,首先您必须将这些程序集移出项目的默认解析路径,以便调用此事件处理程序。当它被调用时,您知道需要这两个版本之一,通过查看ResolveEventArgs.Name,您将知道需要哪个版本。然后你加载这个程序集并从事件处理程序中返回它。

请务必检查事件处理程序是否被准确调用了两次,以便加载两个版本...

【讨论】:

  • 这仅适用于程序集没有强命名并且您使用多个 AppDomain 的情况。一般来说,您将需要另一个 AppDomain,因为如果程序集不是强命名的,即使您使用处理程序,.NET 也不会在同一个 AppDomain 中加载它认为相同的程序集两次。由于涉及 .NET 远程处理,对 UI 组件使用子 AppDomain 可能不是一个好主意。
猜你喜欢
  • 2019-05-19
  • 2019-03-25
  • 1970-01-01
  • 2011-07-11
  • 2010-10-31
  • 2011-04-28
  • 2018-01-14
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多