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:
- 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?