在我的公司,不同的团队正在开发基于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