Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load assembly from memory

I am porting a Java application where classes are loaded and "executed" at runtime from memory (a byte array). I am trying to achieve the same thing in C#, but I am having problems (System.IO.FileNotFoundException exceptions) when trying to load assemblies from byte arrays (using the AppDomain.Load method).

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

Is there a way to load them without the need to persist this byte array into the file system?

Simplifying the idea, we want to have the ability to execute and change (update) code dynamically. We use separate application domains to "load/unload" assemblies.

like image 867
user379898 Avatar asked Oct 21 '25 13:10

user379898


2 Answers

I've just tried this code:

static void Main(string[] args)
        {

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

            var g = Assembly.Load(h);            
        }

and it worked fine - I did not get any exceptions. Are you 100% sure that the target assembly exists?

like image 142
Jason Evans Avatar answered Oct 23 '25 04:10

Jason Evans


Does it have any dependencies? If so, you should load them first.

like image 38
Hans Olsson Avatar answered Oct 23 '25 03:10

Hans Olsson



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!