2014-02-20 76 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

相關問題