2009-02-05 3 views
0

"Place"클래스와 정수를 반환하는 "Where"클래스로 구성된 .NET DLL이 제공됩니다. DLL을 응용 프로그램 도메인에로드하고 함수를 실행하고 응용 프로그램 도메인을 언로드해야합니다.appdomain에서 함수 실행


'Could not load file or assembly 'Place, Version=1.0.0.0, Culture=neutral, PublicKeyToken-null' or one of it's dependencies. The System Cannot find the specified file.' 

파일이 버퍼에, 그래서 나는 그것이 의존성의 .DLL 같은데요 :이 오류 메시지와 함께


Dim asy As Assembly = domain.Load(buffer) 

을 :


Dim domain As AppDomain = AppDomain.CreateDomain("Executor")    
Dim buffer() As Byte = IO.File.ReadAllBytes("c:\path\Locator.dll") 
Dim asy As Assembly = domain.Load(buffer) 
Dim obj As [Object] = asy.CreateInstance("Locator.Place") 
Dim method As MethodInfo = obj.GetType.GetMethod("Where") 
Dim result as Integer = method.Invoke(obj, New [Object]() { 1 }) 
AppDomain.Unload(domain) 

이 줄은 실패합니다. 그러나 기본 프로그램 디렉토리에있는 파일을 찾아야합니다.

오류의 원인에 대한 아이디어가 있으십니까?

어셈블리를 AppDomain으로로드하고, 함수를 Extening 한 다음 AppDomain을 언로드하는 테스트 된 샘플 코드는 만족 스러울 것입니다.

은 (BTW, 내가 검색 좀하고 유용한 샘플을 발견하지 않았습니다.)

답변

0

당신이 종속성을로드 할 수 없습니다 알고 fuslogvw를 사용하려고합니다. 확인 http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx

나는 link text에 대한 설명을 발견했다. 몇 가지 함정을 설명하고 VB.NET으로 쉽게 번역되어야하는 샘플 코드를 제공합니다.

이 정보가 도움이되기를 바랍니다.

1

오류가 누락 된 참조로 표시되었다는 것이 맞습니다. 어셈블리를로드하는 방법 때문에 참조를 해결할 수 없습니다. 바이트 배열에서로드하므로 Assembly.Location은 dll의 위치를 ​​가리 키지 않습니다. 참조하는 DLL이 GAC에 없으므로 참조 된 어셈블리를 찾을 수 없습니다. 먼저 파일에서 어셈블리를로드하고 바이트 배열에 먼저로드하지 마십시오.