2010-07-01 63 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

它有任何依赖关系吗?如果是这样,你应该先加载它们。