2017-09-19 75 views
0

的多个版本,我有一个WPF应用程序,它利用了众多项目的各种第三方控件。在其中一个项目中,我需要将特定的控件升级到最新版本,而其他项目的网格控件则保持原版。任何人都可以推荐文章,示例代码等,它显示了如何做到这一点?简单地说,我需要做的是这样的:WPF,第三方控制

  • MainAppModule.csproj,引用和部署所有共享的DLL到... \ lib文件夹
    • ModuleA.csproj,引用ThirdParty.dll,V1。 0
    • ModuleB.csproj,引用ThirdParty.dll,V2.0

是集绑定重定向这里需要什么?如果是的话,它将如何建立?

+0

*“同时使其他项目网格控件完整与早期版本的” *是我很难解析。您可能能够只是把'的xmlns:XXX =“等等等等”'对于“等等等等”的不同值在不同的子控件,但你必须要有点更具体的了解你想在这里做什么。沟通你的XAML所做的一个毫不含糊的方式就是向我们展示你的XAML。这是与像我这样需要更多澄清的人打交道的黄金标准。对代码的唯一充分的描述是代码本身。 –

+0

如果有问题的程序集是强命名的,那么在同一进程中多个版本的同一控件应该没有问题 – MickyD

回答

0

我不知道你的组件结合重定向的意思......

,我真的不知道,如果这对你的作品,因为这两个组件将具有相同命名空间 ...

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

一定要检查该事件处理程序只调用两次,这两个版本都加载中...

+0

这只适用于程序集不具有强名称并且您使用多个AppDomain的情况。一般来说,你会需要另一个的AppDomain作为.NET将不会加载它认为是相同的组件两次在同一个AppDomain中,如果该组件是不强命名的,即使你使用的处理程序。由于涉及.NET远程处理,使用子AppDomains用于UI组件可能不是一个好主意。 – MickyD