2014-02-20 80 views

回答

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身份,因为您将无法使用某个版本中的类型替换另一个类型的类型(包括无法投射它们)。

+0

我知道绑定重定向以及如何在简单场景中使用它们。但是,当不同的Prism模块引用相同程序集的不同版本时,我无法使它工作(即使在部署应用程序后,我也想保留不同的版本) – rlesias

+0

如果这是可能的,我不相信它,如果引用的程序集有某个静态方法会发生什么?你会期望两个独立的静态方法(每个版本一个),或者你期望两个版本都使用相同的静态方法吗?静态字段的相同问题,你可能会陷入一片混乱。 – Lukazoid

+0

我希望每个模块都根据配置文件中设置的内容来选择正确的版本。这似乎并不奏效。 – rlesias

相关问题