从内存加载程序集

时间:2010-07-01 13:28:32

标签: c# .net assembly-loading

我正在移植一个Java应用程序,其中类在运行时从内存(字节数组)加载和“执行”。我试图在C#中实现相同的功能,但在尝试从字节数组加载程序集时(使用System.IO.FileNotFoundException方法),我遇到了问题(AppDomain.Load异常)。

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"));
}

有没有办法加载它们没有需要将这个字节数组保存到文件系统中?

简化这个想法,我们希望能够动态地执行和更改(更新)代码。我们使用单独的应用程序域来“加载/卸载”程序集。

2 个答案:

答案 0 :(得分:1)

我刚试过这段代码:

static void Main(string[] args)
        {

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

            var g = Assembly.Load(h);            
        }

它工作正常 - 我没有任何例外。您是否100%确定目标组件是否存在?

答案 1 :(得分:0)

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