2011-11-10 65 views
1

我有2個版本的相同dll。稱爲named,Test.dll。我想從我的控制檯應用程序調用2個dll。打電話給不同版本的不同程序集

我試着使用Extern別名。但它正在調用新的DLL。我從我的DAL課程中調用這2個dll。

任何幫助,將不勝感激。

感謝,

回答

1

這不是你在.net中做事情的默認方式,因此在這種方式下編碼並不容易。正如@Johnathon Reinhart在他的回答中所說的那樣,您將不得不使用Assembly.Load(通過將完全限定的程序集名稱傳遞給該函數)。 像這樣:

Assembly asmOld = Assembly.Load("MyAssembl, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ab1234567defabc1"); 
Assembly asmNew = Assembly.Load("MyAssembl, Version=2.0.0.1, Culture=neutral, PublicKeyToken=ab1234567defabc1") 

此外,你將不得不繼續參照上述兩個組件,然後使用Assembly.CreateInstance創建你所需要的類型的實例。之後,您將不得不使用反射向成員致電(something like this)。就像這樣:

Ojbect objOld = asmOld.CreateInstance("MyApp.Namespace.Classname"); 
Ojbect objNew = asmNew.CreateInstance("MyApp.Namespace.Classname"); 
objOld.GetType().InvokeMember("TestMethod", BindingFlags.InvokeMethod,null,obj,null); 
objNew.GetType().InvokeMember("TestMethod", BindingFlags.InvokeMethod,null,obj,null); 

要提高代碼的編寫,你可以使用LateCallMicrosoft.VisualBasic.CompilerServices與你的對象工作。有一個很好的包裝對於安迪Adinborough - http://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0

+0

感謝的快速反應。然而我的方法需要DTO對象(自定義對象),需要找出執行它的方式 –

相關問題