2014-04-28 2 views
0

Composable.AddLocation이 작동하지 않습니다. dll이로드되어 있어도 (출력 창에서 볼 수 있음) GetExport는 항상 null을 반환합니다.XSockets 플러그인 프레임 워크 AddLocation

Composable.LoadAssembly(Path.Combine(Helper.PluginsDirectory, "testplugin.dll")); 

을하지만이되지 않습니다 : 내가 http://xsockets.net/docs/the-plugin-framework

에서 표준 예를 사용 그래서이 작품

Composable.AddLocation(Helper.PluginsDirectory, SearchOption.AllDirectories, false); 

다른 모든 코드가 동일합니다.

P. 여기 솔루션 : Plugins 디렉토리의 플러그인 인터페이스를 설명하는 XSockets Plug-in Framework dll 및 dll을 삭제할 때 Composable.AddLocation이 작동하기 시작합니다.

답변

0

내 생각은 다음과 같습니다. 플러그인 프레임 워크에서 이미로드 한 "Helper.PluginsDirectory"에 파일이 있습니다. 두 개 중 하나를로드 할 경우 내보내기를 가져올 수 없습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Composable.RegisterExport<IAnimal>(); 

     //Helper that fix your issue... 
     Helpers.AddLocation(@"C:\Users\Uffe\Desktop\DynamicAssemblies\Implementation\bin\Debug", SearchOption.AllDirectories); 

     Composable.ReCompose(); 

     var a = Composable.GetExports<IAnimal>(); 
     foreach (var animal in a) 
     { 
      animal.Says(); 
     } 

     Console.ReadLine(); 
    } 

} 

public static class Helpers 
{ 
    public static void AddLocation(string location, System.IO.SearchOption searchOption) 
    { 
     foreach (var assembly in Directory.GetFiles(location, "*.dll", searchOption)) 
     {     
      AssemblyName verifyName = AssemblyName.GetAssemblyName(assembly);         
      if(!Composable.LoadedAssemblies.Any(p => p.FullName == verifyName.FullName)) 
       Composable.LoadAssembly(assembly);     
     } 
    } 
} 
+0

해결 방법은 ... 답변을 주셔서 감사합니다. 작업 예입니다. 하지만 해결책은 내 것과 같습니다. 내가 말했듯이 Composable.LoadAssembly 호출로 플러그인을로드하는 데 문제가 없습니다. 내 질문에 왜 Composable.AddLocation (dll이 한 번만로드되었는지, 디버그 출력에서 ​​확인 됨)이었습니다. 하지만 오늘 Composable.AddLocation을 사용하여 동일한 코드가 작동하기 시작했습니다. 나는 그 이유를 모르지만 내 질문은 거짓 긍정, 미안해 보인다. – Arteny