어셈블리가 Application Base 디렉터리와 다른 경로에 있으므로 어셈블리를 Assembly.LoadFrom()
을 사용하여로드하고 있습니다.Assembly.LoadFrom 이후 ResolveEventHandler
Dim oAssembly As Assembly = _
Assembly.LoadFrom("C:\\MyFolder\\" + ddlXlate.SelectedItem.ToString() + ".dll")
그리고 나는 아무 문제없이 해당 어셈블리에서 Type
소비 : 나는 아래와 같은 다른 방법 내에서이 어셈블리에서 Type
를 사용하려고하면
oXML = CType(oAssembly.CreateInstance(sBaseType + ".XlateContainer"), _
XlateBase.XlateContainer)
그러나, 문제가 발생합니다 :
oComboBox.DataSource = _
[Enum].GetValues(Type.GetType(sType + "+ItemEnum," + sAssemblyName))
sAssemblyName
LoadFrom()
를 사용하여로드 하나입니다. 그것이 어셈블리를 찾을 수 없다고 후, 나는 내 문제를 해결
AssemblyResolve
이벤트를 사용 :
AddHandler AppDomain.CurrentDomain.AssemblyResolve, _
AddressOf MyResolveEventHandler
이벤트 처리기 방법 :
Private Shared Function MyResolveEventHandler(ByVal sender As Object, _
ByVal args As ResolveEventArgs) As Assembly
Return Assembly.LoadFrom("C:\\PSIOBJ\\" + args.Name + ".dll")
End Function
그리고
는 AssemblyResolve
이벤트를 구독 그게 아마도를 사용하여로드 된 어셈블리 매니페스트 파일에 정의 된 종속 어셈블리를 찾을 수 없기 때문에 오류가 발생했을 가능성이 있습니다.이미 있지만, 내가 args.Name
을 검사했을 때, 나는 그것이 동일한 어셈블리를로드하려고 시도하는 것을 보았고 아무런 문제없이 작동했다. 기본적으로로드 된 어셈블리의 유형은 이벤트를 변경하기 전에 찾을 수 없습니다.
내 이전 코드는 AppDomain.CurrentDomain.Load()
및 Assembly.Load()
메서드를 사용하고 있었고 AssemblyResolve
이벤트 없이는 정상적으로 작동했습니다. 동적으로로드 된 유형 Assembly
에 도달 할 수있었습니다. 같은 위치의 모든 곳에서 AppDomain
.
LoadFrom()
은 동일한 요청 된 어셈블리 경로 내에서 자동으로 종속성을 찾을 수 있으며이 모든 것이 문제가되지 않을 수도 있습니다. dll
필요합니다. 그래서 처음에는 AppDomain
처럼 보였으므로 컨텍스트 대신 Load
컨텍스트에서 어셈블리에 도달 할 수있는 것처럼 보입니다. 지금은 LoadFrom
컨텍스트를 사용하고 있습니다.
- 이제로드 된 어셈블리의 모든 유형을 사용하려면
oAssembly
인스턴스 evertwhere를 전달해야합니다. - 간단한
Type.GetType(...)
메서드를 사용하여 모든 곳 (동일한 AppDomain)에 연결할 수있는 어셈블리를로드하지 않습니까?
누락 된 부분을 채우고 내 질문에 답변 해주십시오.
사실 C#을 사용하면 VB.NET이 마음에 들지 않지만 Office에서 사용해야합니다.
조금 더 많은 정보가 필요합니다. LoadFile과 LoadFrom을 모두 사용하여 어셈블리를로드하십시오. 결과로 나타나는 어셈블리 위치 및 FullName 속성을 비교하십시오. 또한 Type.GetType 호출에서 어셈블리의 전체 이름을 추가하십시오. "MyFolder"및 응용 프로그램 EXE 폴더에 해당 어셈블리 또는 해당 종속성을 여러 복사본이 있습니까? 여러 AppDomains를 사용하고 있습니까? 여러 스레드? 이 프로젝트는 IIS에서 호스팅됩니까? 아니면 다른 그림자 복사 시스템? LoadFrom 전에 GetType을 호출하면 성공합니까? 어셈블리의 위치와 Fullname은 무엇입니까? – Brannon
우리가 테스트 할 수 있도록 문제를 되풀이하는보다 완벽한 테스트 앱을 게시 할 수 있습니까? 일관되게 실패했거나로드 된 경로/어셈블리에 따라 다르며 동일한 어셈블리의 여러 버전이 있습니까? – NSGaga
'LoadFrom'을 사용하고'Type.GetType (string) '을 'LoadFrom'에 의해 반환 된 완전한 어셈블리 이름은'AssemblyResolve' 이벤트 핸들러를 설정하지 않으면 작동하지 않습니다. 그러나 이벤트 처리기에서 사용하는 경로 인 'C : \ PSIOBJ \ ...'와 LoadFrom 행의 경로 인 'C : \ MyFolder \ ...'는 일치하지 않습니다. 잘라 내기 및 붙여 넣기 오류입니까 아니면 실제로 다른 어셈블리를로드합니까? – Abel