2017-09-19 72 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