어떻게 짐을 어셈블리와 모든 종속성 런타임 시에서는 C#에 대한 반영?

StackOverflow https://stackoverflow.com/questions/59220

  •  09-06-2019
  •  | 
  •  

문제

쓰고 있어요 자신을위한 유틸리티,부분적으로 배우고 운동으로 C#반영하고 부분적 때문에 내가 실제로 원하는 결과 도구에 대한 내 자신만 사용할 수 있습니다.

난 후에는 기본적으로 가리키는 응용 프로그램에서는 어셈블리를 선택하여 주어지는 클래스를 선택하는 속성이 포함되어야에서는 HTML 형식으로 필드가 있습니다.을 형성하는 것 다음 사용에서 나 ASP.NET MVC 응용 프로그램의 시작입니다.

으로 나를 사용하여 Sql 오브젝트를 어플리케이션을 사용하고 싶,이해야 합리적이고 나는 생각에 의하여,원하는 것을 포함한 다른 HTML 을 출력에 따라 데이터 형식,반사되었을 얻을 수있는 방법이다.

내가 무엇을 찾고,그러나,있을 것 같 어려운 것입니다.내가 노력하고 DLL/EXE 는 선택을 통해 온라인 설문 조사를 시작점으로드:

String FilePath = Path.GetDirectoryName(FileName);
System.Reflection.Assembly o = System.Reflection.Assembly.LoadFile(FileName);

는 잘 작동하지만,때문에 아음속 생성적으로 전체 개체의 유형에 정의되어 있는 Subsonic.dll,etc., 그 종속 개체 로드되지 않습니다.입력:

AssemblyName[] ReferencedAssemblies = o.GetReferencedAssemblies();

도,정확하게 포함한 것이 무엇을 기대합니다.그러나 내가 무엇을 알아보려고하는 방법이드 해당 어셈블리는 파로 나체가 제대로 작동합니다.내가 이해하는 경우에는 그 어셈블리에서의 GAC 또는 디렉토리에서 실행 실행,수로에 의해 그들을 자신의 이름이지만,그 가능성이 없을 경우 이를 위해 사용 케이스와 그것의 기본을 사용한 경우.

그래서,그것은 무엇으로 귀결을 로드하려면 어떻게 해야 하는 주어진 어셈블리의 모든 임의 어셈블리로 시작하는 파일 이름 및 결과에 완전히 반사-찾아볼 수 있는 나무의 유형,속성,방법,등등.

내가 알고 있는 도구를 처럼 반사,이렇게 난 그냥을 찾을 수 없습에 대한 구문을 받고 있다.

도움이 되었습니까?

해결책

의 몇 가지 옵션이 여기:

  1. 첨부 AppDomain.AssemblyResolve 고 다른 LoadFile 에 따라 요청된 어셈블리입니다.
  2. 또 다른 스핀 AppDomain 과 디렉터리로 그것의 기초와 로드 어셈블리에서는 AppDomain.

왜 옵션을 추구하기 때문에,2 개 가능성이 있을 것입니다 클리너와 당신을 내리는 모든 사람들 어셈블리후입니다.또한,로드 어셈블리에서 반사-용 컨텍스트해야 하는 경우에만을 반영하여 그들(참조하십시오 Assembly.ReflectionOnlyLoad).

다른 팁

내 일 켄트 Boogaart의 두 번째 옵션입니다.기본적으로 했다:

1.) 를 구현하는 ResolveEventHandler 별도의 클래스를 상속받 MarshalByRefObject 며 추가 Serializable 특성이 있습니다.

2.) 추가 현재 ApplicationBase, 본질적으로는 이벤트를 처리기의 dll,을 AppDomain PrivateBinPath.

당신을 찾을 수 있습니다 코드 github.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top