2012-06-24 3 views
0

Mef에서 특정 (확장 가능) 기능을로드하는 응용 프로그램이 있습니다. 이러한 모듈 (타사)은 타사 컨트롤 (Telerik)을 사용하기 때문에 사용자가인지 한로드 시간 (위에서 언급 한 컨트롤을 사용하여 폼을 열 때)을 최소화하려는 경우 이러한 Mef 모듈이 참조하는 어셈블리를 미리로드해야합니다.AppDomain의 .Load 경로에 Mef의 어셈블리 경로 추가

내가하고있는 일은 Assembly.GetReferencedAssemblies (..) 메서드를 사용하여 Mef 모듈 당 참조 된 어셈블리의 이름을 가져 와서 Assembly.Load (..)하려고 시도하는 것입니다.

모듈이 (일반적으로 ExecutingAssembly 경로와 다른) 파일 시스템의 어딘가에 위치하므로 Gac에없는 Mef 모듈에 대한 참조는로드에 실패합니다.

내 AppDomain.CurrentDomain의 어셈블리로드 경로를 수정할 수있는 방법이 있습니까? AppDomain.AssemblyLoad 이벤트를 알고 있지만 각 모듈이 서로 다른 디렉터리에있을 수 있으므로이를 활용하는 것은 약간 번거로운 작업입니다.

답변

0

간단히 AppDomain.AppendPrivatePath을 호출 할 수 있었지만이 메서드는로드 순서 문제 (read here)를 도입 할 수 있으므로 obselete로 표시됩니다. 권장 방법은 추가 경로를 포함하도록 구성을 업데이트하거나 AppDomainSetup.PrivateBinPath을 사용하는 것입니다 (그러나 후자는 새 응용 프로그램 도메인을 만들 때 사용합니다). 합니다 (associated MSDN page에서 바로 드러내)

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

:

는 구성 변경 사항을 적용합니다. 여러 개의 경로를 세미콜론으로 구분하여 지정할 수 있습니다. AppDomain.AppendPrivatePath(...)을 사용하면 위험 할 수 있지만 .NET BCL v4.0에서는 여전히 존재하지만 그 이유는 obselete로 표시되어 있습니다.

+0

감사합니다. Matthew. AppDomain.AppendPrivatePath를 시도했지만 그 방법이 작동하지 않고 흥미롭게도 그 메서드를 호출 한 후 AppDomain의 .PrivatePath 속성은/여전히 비어 있고로드가 여전히 실패합니다. 또한 app.config에서 부분을 발견했지만 문제는 경로가 '동적'이라는 것입니다. 제가 골머리를 앓고있는 것은 MEF가 이것을 처리하는 방법입니다. 왜냐하면 .Net이 필요한 어셈블리 참조의 게으른로드를 정상적으로 수행하도록하기 때문에 완벽하게 작동합니다. –

관련 문제