从内存中加载程序集

4

我正在将一个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"));
}

有没有一种方法可以在不需要将这个字节数组持久化到文件系统中的情况下加载它们?

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


字节数组必须来自某个地方。您可以打开网络连接,或使用共享内存技术获取字节。 - Ron Klein
2个回答

2

我刚刚尝试了这段代码:

static void Main(string[] args)
        {

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

            var g = Assembly.Load(h);            
        }

它运行得很好 - 我没有收到任何异常。您是否100%确定目标程序集存在?


我在问题中犯了一个错误,我使用的方法是AppDomain.Load。我会更新帖子。 - user379898

1

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


我正好忘记了,谢谢! - Matheus Rocha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接