2012-08-25 57 views
2

我當前從遠程流中獲取程序集作爲字節數組。無論如何加載它到一個新的AppDomain?將字節[]裝載到新AppDomain中

AppDomain.Load(byte [])不起作用,因爲它給我FileNotFoundException,我假定程序集必須在我的計算機上。

 AppDomain domain = AppDomain.CreateDomain("Test"); 

     Thread t = new Thread(() => 
     { 
      Assembly assembly = domain.Load(bytes); 
      MethodInfo method = assembly.EntryPoint; 
      if (method != null) 
      { 
       object o = assembly.CreateInstance(method.Name); 
       try 
       { 
        method.Invoke(o, null); 
       } 
       catch (TargetInvocationException ex) 
       { 
        Console.WriteLine(ex.ToString()); 
       } 
      } 
     }); 
     t.Start(); 

回答

1

你需要傳遞的是字節數組的代碼在新的AppDomain中運行,並且對這些數據調用Load(byte[])

現在和程序集的任何加載一樣,您需要了解在使用不同的加載程序集的方法時如何解決依賴關係。在大多數情況下,您必須將依賴關係預加載到新的AppDomain中或添加AssemblyResolver事件處理程序。搜索"C# LoadFrom Cook"以獲取Suzanne Cook關於加載組件的文章集。

+0

你在說什麼,我應該創建一個類或方法,我會在AppDomain上面?我需要看看那些文章。 – 0xFF

+0

是的,您應該從您希望將其加載到的域內加載程序集。否則,您可能會像當前示例一樣從新的AppDomain中泄漏類(它會創建對父域可見的對象)。附註:我假設你明白線程與AppDomain無關,任何線程中的代碼都可以多次跨AppDomain邊界。 –

+0

線程是繞過錯誤的一種方法(我試圖在WinForm中運行WinForm),並且我意識到類泄漏。非常感謝您的幫助。 – 0xFF

相關問題