2013-04-16 3 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/en-us/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, 다음 (예 : 모든 방법입니다 아래) 당신이 필요로하는 모든 방법을 찾을 수 있습니다 여전히 공통 인터페이스가없는 경우이 같은 Invoke을 사용하여 선택 하나를 호출 한 후

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

을 그리고 :

method.Invoke(selectedObjcClass, params...); 
관련 문제