2012-09-13 2 views
0

C# .net 3.5 응용 프로그램을 빌드 중입니다.DLL을 동적으로로드 할 때 메소드를 찾을 수 없습니다.

나는 exe 인 DLL을 참조하는 'MainApp을'이 'CommonDll'

CommonDll 동적으로 다른 DLL 'LoadedDll'을로드하고 동적 방법이라고 FUNC()를 호출합니다.

'LoadedDll'참조합니다 'CommonDll'는 'CommonDll'에

FUNC()를 호출하는 메소드 foo에()가 존재한다.

func() 
    { 
     foo(); 
    } 

그래서, 우리가 지금까지 무엇을 :

MainApp ==> CommonDll ==이 동적으로 ==> LoadedDll

LoadedDll ==> CommonDll.

foo() 메서드를 부울 인수로 변경하기 전까지는 모든 것이 잘 작동했습니다. foo (bool val); 및

func() 
{ 
foo(true); 
} 

에도 'LoadedDll'에서 FUNC()를 cheanged 나는 버전 1.1

에서 MainApp (참조 이전 CommonDll) 버전 1.0 및 LoadedDll (참조 새로운 CommonDll)에 대한이 어떤 이유로 부울 인수를 가져 오는 foo를 찾을 수 없다는 foo 메소드의 "MethodNotFound Excepion"을 얻습니다.

왜 이런 일이 발생합니까? LoadedDll은 업데이트 된 CommonDll에 대한 정적 참조를 사용하고 있으므로 해당 메소드를 찾을 수없는 이유는 무엇입니까?

또한 예외적으로 동적으로로드되는 'func()'메서드를 찾을 수 없다는 것은 아니지만 foo 메서드를 찾을 수 없다고 말합니다.

는 편집 :

나는 GAC에 DLL을 찾았지만 메모리에 이미 오래된 DLL 대신 새로운 하나의로드 할 또 다른 이유가있다,이 없다?

+1

dll 로딩 코드를 표시하십시오. –

+0

이것들을 사용하기 위해 당신의 리플렉션을 사용합니까? 그렇다면 매개 변수 객체 배열을 invoke 메서드에 전달 했습니까? – LukeHennerley

+0

응용 프로그램을 다시 빌드하십시오. –

답변

0

문제점의 원인을 파악했습니다.

dll 버전을 상수 값으로 계산하는 외부 코드가 있으므로 강력한 이름이 동일합니다.

buttom line : dll을로드 한 다음 동일한 강력한 이름으로 다른 dll을로드하려고하면 첫 번째 dll이 사용됩니다.

같은 이름으로 2 개의 dll을로드하려면 서로 다른 강력한 이름이 있어야합니다.

0

나 역시 그런 일이 발생했습니다. 내가 dll을 동적으로로드하는 곳의 디렉토리에서 모든 추가 dll (이전에 내 기본 exe로로드 된 종속성)을 삭제했습니다. 대답의 이유가 정확합니다.

관련 문제