在我的公司,不同的团队正在开发基于WPF的同一产品的不同模块。一些模块引用相同的组件,例如Log4net,内部框架等...... 为了最大限度地减少影响,我们希望每个团队能够更新其模块引用的程序集的版本,而不必强制其他团队执行相同的操作。 Prism有可能吗?
答案 0 :(得分:3)
这是可能的,但与Prism无关。您需要注意的是使用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>
这指定对版本OurInHouseLibrary
到版本1.0.0.0
的程序集1.0.32.27762
的任何引用现在应该引用版本OurInHouseLibrary
处的程序集1.0.32.27762
。< / p>
我建议反对它,但另一种选择是使用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
身份,因为您将无法使用一个版本中的类型代替另一个版本的类型(包括无法投射它们)。