我正在将一个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"));
}
有没有一种方法可以在不需要将这个字节数组持久化到文件系统中的情况下加载它们?
简单来说,我们希望能够动态执行和更改(更新)代码。我们使用单独的应用程序域来“加载/卸载”程序集。