2015-11-13 48 views
0

做組件映射的原因/目的是什麼?改變版本政策?我明白,如果你的app.exe想要使用新的程序集版本,你可以重定向程序集版本,但你爲什麼要?依賴程序集的新版本不會更改嗎?.Net組件映射策略目的

假設有一個calc.dll和app.exe。 app.exe依賴於calc.dll。如果calc.dll被重建並且重命名了一堆方法,當重定向到calc.dll新版本時運行時不會app.exe失敗?

+2

如果他們對Calc進行了突破性更改,那麼肯定不會使用新版本,但是如果他們修正了乘法方法返回錯誤數字的錯誤怎麼辦?那麼你會想要新的。 – Chris

+1

是的,它可能會失敗,這就是爲什麼你必須明確地做應用程序配置重定向。您在使用新版本的dll測試應用程序後執行重定向。目的是讓您利用新功能,錯誤修復,更新版本中的性能改進,而無需重新編譯,如果您選擇這樣做。 –

回答

2

由於關心客戶的作者努力保持向後兼容的相同程序集的接口/類型,因此使用相同程序集的較新版本通常不是問題。

主要問題是其他程序集取決於舊版本。

比方說,有常見的「Shared.dll」,它有多個兼容的版本(衆所周知的樣本 - JSON.Net),並通過在代碼中使用,以及您的代碼需要一些其它的DLL:

ThridParty.dll (v1) -> Shared.dll (v1) 
YourApp.exe -> Shared.dll (latest = v5), ThirdParty.dll (v1) 

現在你需要Shared.dll的兩個版本,但都有相同的文件名(可以通過手動加載一個文件名來解決),並且不能使用由混合版本生成的對象(v1中的Shared.Type1與.Net中的Shared.Type1不同規則)。

爲了解決您使用程序集重定向並說「每當有人要求Shared.dll v1使用Shared.dll v5」。這種方式ThridParty.dll繼續工作得很好,你不會再面對同時加載的2個文件/版本的問題。