2011-07-02 4 views
4

.NET에서 동적으로 컴파일 된 메모리 어셈블리가 참조하는 어셈블리를 해석하는 방법은 무엇입니까?.NET - 이미로드 된 어셈블리의 파일 또는 어셈블리를로드 할 수 없습니다.

저는 Razor 뷰 엔진을 호스팅하고 있으며이를 사용하여보기를 즉시 컴파일하지만, 주 프로젝트의 어셈블리를 참조하는 데 문제가 있습니다. 컴파일 매개 변수에서 나는 다음과 같이 프로젝트 어셈블리에 뭔가를 참조를 추가 :

// Add references to all currently loaded assemblies 
foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    compileParams.ReferencedAssemblies.Add(a.Location); 
} 

코드는 컴파일하고 내가 프로젝트 DLL의 모든 유형을 참조하지 않는 한 너무 오래, 잘 실행 - 어떤 경우에 I

Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

나는 두 번 확인했는데이 어셈블리가 이미 예외가 발생되고있는 시점에서로드 : 다음 오류가 발생합니다. 내가 뭘 놓치고 있니?

+0

어셈블리의 공개 키 토큰은 어디에 있습니까? 설정 파일이나 IDE를 통해 수동으로 추가 하시겠습니까? –

+0

서명 된 어셈블리와 서명되지 않은 어셈블리를 모두 시도했지만 아무런 차이가 없습니다. –

답변

1

코드에서 동적으로 컴파일 된 메모리 어셈블리를 호스팅 할 별도의 AppDomain을 만드는 것처럼 보입니다.

동적으로 컴파일 된 어셈블리가 기본 응용 프로그램이 아닌 어셈블리를 참조하고있는 것일 수 있습니다. 예외를 ReflectionTypeLoadException으로 전송하고 LoaderExceptions을 확인하는 것이 단서를 제공하지 않는지 확인합니다.

+0

사실, 이것은 하나의 앱 도메인에 모두 없습니다. –

+0

LoaderExceptions를 확인해 보셨습니까? –

2

알아 냈어. 주요 프로젝트는 다른 디렉토리에있는 exe에 의해로드 된 dll입니다. .NET 어셈블리 로더는 기본적으로 exe 디렉토리를 검색하지만 dll 디렉토리는 검색하지 않습니다. 프로젝트 DLL의 폴더를 검색하는 AppDomain.CurrentDomain.AssemblyResolve 이벤트로 해결되었습니다.

+0

LoadFile을 사용 하시겠습니까? 하지마, 악마 야. –

관련 문제