2012-02-02 1 views
2

현재 일부 확장 DLL에서 일부 부품을로드하는 데 MEF와 DirectoryCatalog를 사용하고 있습니다. 저와이 프로그램을 사용하는 대부분의 사람들에게 효과적이지만 일부 사용자는 전혀로드되지 않는 부분을 경험합니다. 일부 디버그 정보를 수집하면 MEF가 DLL (catalog.LoadedFiles가 나열 함)을로드하지만 catalog.Parts에 나열된 부분이없는 것으로 보입니다.MEF 부품 목록이 비어있는 경우가 있습니다.

한 명의 사용자가 XP sp3에 있고 한 대의 사용자가 Windows 7에 있기 때문에 OS가 문제라고 생각하지 않습니다. 왜 이런 일이 일어날 지에 대한 생각을 가진 사람이 있습니까?

다음은 실제로 도움이 될 수 있도록 컨테이너를 실제로 만드는 코드입니다.

 private static IEnumerable<Task> CreateTypes() 
    { 
     CompositionContainer container = GetContainer(); 
     var exp = container.GetExports<Task>(); 
     return exp.Select(e => e.Value); 
    } 

    private static CompositionContainer container; 
    public static CompositionContainer GetContainer() 
    { 
     if (container != null) 
      return container; 

     DirectoryCatalog catalog = new DirectoryCatalog(ExtensionDirectory, "*.dll"); 
     container = new CompositionContainer(catalog); 
     return container; 
    } 
+0

일부 코드가 도움이 될 것입니다. –

+0

컨테이너를 만드는 동안 오류가 있습니까? – blindmeis

+0

아니요, 컨테이너를 만드는 것이 좋습니다. 일부 사람들에게는 부품 목록이 비어있는 것입니다. 얼마나 도움이 될지 모르지만 코드로 업데이트했습니다. – Jamie

답변

1

,

http://mikehadlow.blogspot.com/2011/07/mef-directorycatalog-fails-to-load.html

기본적으로 (예, ... 년 이상 나중에 ... 내 자신의 질문에 대답 해요) IE는 다음 Windows 탐색기로 압축 해제 , DLL은 인터넷에서 나온 것으로 표시되었으므로 MEF는 여전히 카탈로그 내부에 나타 났지만 부품을로드하지 않았습니다.

위의 링크에서 설명한대로 (필자의 경우 적어도) 내 솔루션은 DLL이 인터넷에서 나온 것으로 보인 대체 데이터 스트림을 삭제하는 것이 었습니다.

0

하지만, 다른 하나는 "C : \ Spiele에"에

이 생각 나는 사용자가 만든 폴더처럼 들린다 :

조립로드 문제

.NET에는 어셈블리를로드 할 수있는 다양한 컨텍스트가 있습니다. 기본로드 컨텍스트는 일반적으로 사용할 가장 좋은 컨텍스트이지만 응용 프로그램 기본 디렉터리에 있지 않은 어셈블리, 프로빙 경로에 포함 된 응용 프로그램의 하위 디렉터리 또는 GAC을로드 할 수 없습니다. DirectoryCatalog를 사용하거나 AssemblyCatalog 생성자에 경로를 전달할 때 MEF는 기본로드 컨텍스트에서 어셈블리를로드하려고 시도합니다. 그러나 어셈블리가 프로빙 경로 또는 GAC에 없으면 MEF가이를로드 기반 컨텍스트에서로드합니다.

load-from 컨텍스트로 인해 형식 ID 문제가 발생하여 InvalidCastException, MissingMethodException 또는 기타 오류가 발생할 수 있습니다. MEF 응용 프로그램에서 이러한 문제를 피하려면 응용 프로그램 기본 디렉토리 아래에 확장 디렉토리를 넣고 응용 프로그램 구성 파일의 검사 전용 경로에 추가하십시오. .NET의 어셈블리 로딩에 대한 다른 옵션 및 추가 정보는 어셈블리 로딩 MSDN 문서의 모범 사례를 참조하십시오.

자세한 디버깅 정보 및 도구는 "How to Debug and Diagnose MEF Failures"소스를 참조하십시오. 어떤 사람들은 사용하여 프로그램을 다운로드하기 때문에

관련 문제