在我的公司,不同的團隊正在開發基於WPF的同一產品的不同模塊。一些模塊引用相同的組件,例如Log4net,內部框架等... 爲了最大限度地減少影響,我們希望每個團隊都能夠更新其模塊引用的程序集版本,而不會強迫其他團隊執行相同的操作。棱鏡可以嗎?使用Prism,兩個模塊是否可以引用同一個程序集的不同版本?
0
A
回答
3
這是可能的,但與棱鏡無關。你需要看的是使用binding redirects。
綁定重定向允許您指定對程序集版本X的任何引用實際上應該使用版本Y.這樣不同的團隊可以將它們的依賴關係分別更新到彼此,但是在部署應用程序時,您可以配置綁定重定向到所有指向程序集的版本。
通常將引用重定向到未引入任何重大更改的程序集的最新版本。中斷更改可能會在運行時導致異常。
這裏是結合重定向的示例:
<dependentAssembly>
<assemblyIdentity name="OurInHouseLibrary" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" />
<bindingRedirect oldVersion="1.0.0.0-1.0.32.27762" newVersion="1.0.32.27762" />
</dependentAssembly>
這指定了通過對1.0.32.27762
版本的任何參考1.0.0.0
版本的組件OurInHouseLibrary
現在應該在1.0.32.27762
版本引用組件OurInHouseLibrary
。
我會建議反對,但另一種選擇是使用codeBase
元素重定向到不同的組件,即:
<dependentAssembly>
<assemblyIdentity name="OurInHouseLibrary" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" />
<codeBase version="1.0.0.0" href="v1.0\OurInHouseLibrary.dll" />
<codeBase version="1.1.0.0" href="v1.1\OurInHouseLibrary.dll" />
</dependentAssembly>
Here是微軟解釋爲什麼加載同一程序集的多個版本是一篇文章一件壞事。其中一個主要問題是Type
身份,因爲您將無法使用某個版本中的類型替換另一個類型的類型(包括無法投射它們)。
相關問題
- 1. 引用兩個程序集,每個程序集引用另一個程序集,但版本不同
- 2. maven - 可以兩個模塊使用不同版本的相同的庫
- 3. 是否可以用兩個相同的模塊創建一個複合模塊?
- 4. 是否可以同時運行兩個不同版本的tmux?
- 5. 在LINQPad中引用兩個不同版本的相同程序集
- 6. 更改Python版本以調用兩個不同的模塊
- 7. 使用WPF Prism可以防止兩個模塊試圖同時使用同一個區域嗎?
- 8. 同一應用程序的兩個不同版本
- 9. 引用同一程序集的不同版本
- 10. 是否可以在同一個表中引用不同的列?
- 11. 是否可以在同一頁面上運行兩個不同版本的ReactJS?
- 12. 讓dotfuscator識別兩個針對不同版本的第三個程序集構建的程序集是否引用相同的程序集?
- 13. 如何獲取同一應用程序的多個版本以使用相同版本的程序集? c#
- 14. 如何使Android Studio中的兩個不同模塊通過Gradle使用同一個庫的不同版本
- 15. 是否可以在同一個網站上使用兩個不同版本的JasperServer?
- 16. 通過引用同一程序集的多個版本生成的警告是否可以忽略?
- 17. 是否可以在同一個C/C++程序中使用兩個或多個不同的yylex()函數?
- 18. 是否可以同時安裝2個不同版本的GCC?
- 19. 是否可以引用具有不同SBT版本的項目?
- 20. 是否可以對兩個或多個內聯塊使用不同的行高?
- 21. 將不同的模塊集成到一個Android應用程序
- 22. 是否可以運行同一個webservice的多個版本?
- 23. 我可以在同一個ASP.NET MVC網站上使用兩個版本的程序集嗎?
- 24. 相同引用程序集的多個版本
- 25. 如何在引用同一dll的不同版本的應用程序中使用兩個dll?
- 26. 在同一個應用程序/模塊中使用不同的不兼容版本的CORBA接口?
- 27. 在同一頁面中使用兩個不同的jQuery版本
- 28. 同一個iphone或android應用程序的多個版本是否可以使用共享代碼或庫?
- 29. 使用Java 9模塊,多個模塊是否可以導出相同的包?
- 30. 是否有由使用不同版本SHA散列(hashlib模塊)
我知道綁定重定向以及如何在簡單場景中使用它們。但是,當不同的Prism模塊引用相同程序集的不同版本時,我無法使它工作(即使在部署應用程序後,我也想保留不同的版本) – rlesias
如果這是可能的,我不相信它,如果引用的程序集有某個靜態方法會發生什麼?你會期望兩個獨立的靜態方法(每個版本一個),或者你期望兩個版本都使用相同的靜態方法嗎?靜態字段的相同問題,你可能會陷入一片混亂。 – Lukazoid
我希望每個模塊都根據配置文件中設置的內容來選擇正確的版本。這似乎並不奏效。 – rlesias