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: http://stackoverflow.com/questions/88717/loading-dlls-into-a-separate-appdomain
I had some questions specifically to my implementation:
- If I have multiple scripts to compile and want to unload them independently, do I have to create separate app domains for each?
- What app domain names should I use? Would GUIDs be a good idea? Are there any names I should avoid that may conflict?
- 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.
- Can I use CompilerParameters GenerateInMemory=true, or do I have to save it somewhere?
Thanks for the help. I plan on giving this a try tomorrow.