2010-07-01 61 views
3

我正在移植一個Java應用程序,其中的類是在內存(字節數組)運行時加載和「執行」的。我試圖在C#中實現同樣的功能,但在嘗試從字節數組裝載程序集時(使用AppDomain.Load方法)時遇到問題(System.IO.FileNotFoundException例外)。從內存中加載程序集

static void Main(string[] args) 
{ 
    var domain = AppDomain.CreateDomain("foo"); 

    domain.AssemblyResolve += new ResolveEventHandler(domain_AssemblyResolve); 

    var assembly = domain.Load("MyAssembly"); 
} 
static Assembly domain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    // ... 
    return Assembly.ReflectionOnlyLoad(File.ReadAllBytes(@"C:\MyAssembly.exe")); 
} 

有沒有辦法來加載它們沒有需要堅持這個字節數組到文件系統?

簡化思想,我們希望能夠動態地執行和更改(更新)代碼。我們使用單獨的應用程序域來「加載/卸載」程序集。

+0

字節數組必須來自某處。您可以打開網絡連接,或使用共享內存技術來獲取字節。 – 2010-07-01 15:00:00

回答

1

我只是嘗試這樣的代碼:

static void Main(string[] args) 
     { 

      var h = File.ReadAllBytes(@"C:\MyAssembly.exe"); 

      var g = Assembly.Load(h);    
     } 

它工作得很好 - 我沒有得到任何的異常。你是否100%確定目標程序集存在?

+0

我在這個問題上犯了一個錯誤,我使用的方法是AppDomain.Load。我會更新這篇文章。 – user379898 2010-07-01 13:54:22

0

它有任何依賴關係嗎?如果是這樣,你應該先加載它們。