2011-11-10 6 views
1

두 버전의 동일한 dll이 있습니다. 말해, Test.dll. 내 콘솔 응용 프로그램에서 2 dll을 호출하고 싶습니다.다른 어셈블리의 다른 버전으로 전화 걸기

Extern alias를 사용하려고했습니다. 그러나 그것은 새로운 DLL을 호출합니다. DAL 클래스에서이 두 dll을 호출합니다.

도움을 주시면 감사하겠습니다.

감사합니다,

답변

0

나는이 DLL을 .NET 어셈블리가 있다고 가정뿐 아니라 표준 C DLL을하고있다.

그렇다면 정적으로 어셈블리를로드 할 수 있다고 생각합니다. Assembly.LoadFrom(string assemblyFile) 그렇다면 Assembly.GetModule()을 사용하여 해당 어셈블리에서 모듈을 얻을 수 있다고 생각합니다.

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); 

는 코드 작성을 개선하기 위해, 당신은 당신의 개체에 작업을 Microsoft.VisualBasic.CompilerServices에서 LateCall를 사용할 수 있습니다. http://andy.edinborough.org/Use-Late-Binding-in-C-Now-without-NET-4-0

+0

감사 - 앤디 Adinborough에 의한위한 좋은 래퍼가있다. 그러나 내 메서드는 DTO 개체 (사용자 지정 개체) 걸립니다, 그것을 실행하는 방법을 찾아야합니다. –