2012-07-13 33 views
4

我有我的工作,一個項目引用引用組件,這樣的組件:如何不要求裝配的特定版本

Me 
|- A 
| |- B v1.4.2 
| 
|- B v1.5 

A不需要引用1.4.2專,只是大於1.4左右的任何東西。在A的參考資料中,B表示「Specific Version = False」,但是當我運行MeB v1.5時,我得到一個FileLoadException正在尋找B v1.4.2。但是,B v1.5存在,我如何使CLR護理更少?

+0

您需要添加一個[bindingRedirect](http://msdn.microsoft.com/en-us/library/eftw1fys.aspx)到1.4。*到1.5。 – vcsjones 2012-07-13 21:46:24

+1

[重定向程序集版本](http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx)包含所需的所有背景信息 – Steve 2012-07-13 21:48:15

+0

我看到了,但沒有其他方法可以編譯A等它不關心它在運行時給出的B版本? – kelloti 2012-07-13 21:49:43

回答

2

雖然綁定重定向是這裏的一種方式,但有時這是不可能的 - 也就是說,如果您是在另一個EXE中加載插件。我們採用的實際解決方案是掛接AppDomain.CurrentDomain.AssemblyResolve事件,監聽myassembly1.4.2.dll的失敗綁定(例如),並將調用返回的程序集顯式返回給System.Reflection.Assembly.LoadFrom("c:\assemblies\myassembly.1.5.0.dll")。綁定重定向比較好,但有時候並不實用。