문제

을 추가하려고 애드온 시스템 내 Windows.Net 응용 프로그램을 사용하여 반사;하지만 그것은 실패가 있을 때와 애드온을 dependencie.

애드온은 클래스 인터페이스를 구현하기 위해'IAddon'고 있다.
주요 프로그램을 로드하는 애드온을 사용하여 반사:

Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\Addon.dll");
Type t = assembly.GetType("Test.MyAddon");
ConstructorInfo ctor = t.GetConstructor(new Type[] { });
IAddon addon= (IAddon) ctor.Invoke(new object[] { });
addon.StartAddon();

그것은 좋은 작품을 할 때는 애드온을 사용하지 않는 dependencie.하지만 만약 내가 애드온을 참조하여 사용하는 다른 DLL(C: emp estAddon\MyTools.dll)는 저장 근처에는 애드온에서 디스크,그것은 실패합니다.
시스템입니다.IO.FileNotFoundException:Could not load file or assembly'MyTools.dll'중 하나 또는 그것의 종속성입니다.

나지 않아 복사하고 싶은 애드온 DLL 근처 실행,내가 할 수있는 방법을 말한다.Net runtime 에서 검색하"C: emp estAddon\"어떤 종속?

참고로 추가

Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\MyTools.dll");

변경되지 않습니다.

도움이 되었습니까?

해결책

만약에 myTools.dll 동일한 디렉토리에 있습니다 addon.dll, 당신이해야 할 일은 전화뿐입니다 Assembly.LoadFrom 대신에 Assembly.LoadFile 코드가 작동합니다. 그렇지 않으면, 처리 AppDomain.AssemblyResolve 이벤트는가는 길입니다.

다른 팁

당신은 사용을 조사 했습니까? 제어의 역전 컨테이너? 나는 외부 boo 파일과 함께 Castle Windsor를 사용하여 의존성 공급에 대한 걱정없이 Applcation을 쉽게 확장 할 수 있습니다.

반사를 사용하여 개인에 액세스 할 수 있습니다 Assembly._GetReferencedAssemblies().

그러나 방법은 ~할 수 있었다 미래 버전의 .NET 프레임 워크의 변경 가능성은 없을 것 같습니다. mscorlib 에게 System.Web 이것은 메소드가 참조되는 위치에서 내가 아는 유일한 어셈블리입니다.

Assembly.loadfrom은 내 addon에서 웹 서비스를 사용하려고 할 때까지 잘 작동합니다.'x'타입 'x'의 객체를 캐스트 할 수 없음 'x'" 예외.

추악하지만 AppDomain.assemblyresolve와 함께 Assembly.loadFile을 사용합니다.

감사합니다.

의 몇 가지 옵션:

  1. 첨부 할 수 있습니다 AppDomain.AssemblyResolve 하는 데 도움 CLR 를 해결합니다.
  2. 당신이 볼 수 있으로 격리하는 추가 기능으로 자신 AppDomain (참조하십시오 System.AddIn 네임스페이스 이 웹사이트).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top