Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unload CodeDom-compiled assembly

I have some C# code (let's call it "script") I am compiling at runtime. It uses an interface in my main program that I use to access its functions. Once compiling is done I have CompilerResults.CompiledAssembly in which case I can CreateInstance(Type).

Once I am done using the script I would like to unload completely. From what I understand, I can only do this if I create a separate app domain: Loading DLLs into a separate AppDomain

I had some questions specific to my implementation:

  1. If I have multiple scripts to compile and want to unload them independently, do I have to create separate app domains for each?
  2. What app domain names should I use? Would GUIDs be a good idea? Are there any names I should avoid that may conflict?
  3. If the assembly is in a separate app domain, will it have any issues accessing the interface in the main program? I am currently doing ReferencedAssemblies.Add(typeof(Interface).Assembly.Location) before I compile.
  4. Can I use CompilerParameters GenerateInMemory=true, or do I have to save it somewhere?
like image 721
Nelson Rothermel Avatar asked Sep 22 '09 22:09

Nelson Rothermel


1 Answers

Answers in order:

  1. Yes, if you want to unload them independently you'll need separate app domains.
  2. Use whatever. It may help you debugging if you can identify it back to script, but that would be more true for the executing Thread.
  3. Not so long as you set the domain setup's base path to your own.

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

  4. No you don't need to save it and it doesn't sound like it would benefit you.

like image 88
csharptest.net Avatar answered Sep 23 '22 10:09

csharptest.net