2013-04-16 78 views
0

我想在運行時從另一個應用程序加載一個dll,但同時需要創建一個在dll中實現的類的實例。它可以完成嗎?我可以在運行時加載dll,並且有一些例子,但是如何在沒有加載dll的情況下調用類?不會編譯,對嗎?在運行時在.Net中加載dll並創建一個類

+2

可能的複製[負載運行時組件,並創建類的實例(http://stackoverflow.com/questions/1803540/load-assembly-at-runtime-and-create-類實例) – Vamsi

+0

[如何將程序集加載到應用程序域](http://msdn.microsoft.com/zh-cn/library/25y1ya39.aspx) –

+0

[如何卸載應用程序域](http: //msdn.microsoft.com/en-us/library/c5b8a8f9.aspx) –

回答

1

您可以在運行時加載dll。

這樣的:

//load assembly 
var ass = Assembly.LoadFile("ADll.dll"); 

//get types from assemblt 
var typesInAssembly = ass.GetTypes(); 

var type = typesInAssembly.First(/*select one*/); 

//create instance 
var object = Activator.CreateInstance(type, new object [] { "arguments" }); 
+0

謝謝。你將如何調用新對象的屬性?不能使用object.MyProperty,對吧? – NewDTinStackoverflow

+0

當然,您可以使用下面的調用方法。只需使用GetProperties –

+0

還有一個問題,如果被加載的dll需要另一個dll,我可以同時加載多個dll嗎?它似乎沒有工作.... – NewDTinStackoverflow

1

它會編譯。最簡單的方法是與您的應用程序有共同的界面,並加載DLL。你可以在這裏找到熱門文章:C# - Correct Way to Load Assembly, Find Class and Call Run() Method

但是,如果你沒有共同的界面仍然可以CreateInstance,然後找到你所需要的所有方法(下面的例子是所有方法):

MethodInfo[] methodInfos = Type.GetType(selectedObjcClass) .GetMethods(BindingFlags.Public | BindingFlags.Instance); 

然後調用使用Invoke這樣的選擇之一:

method.Invoke(selectedObjcClass, params...); 
相關問題