/// <summary>
/// Produces new assembly at runtime.
/// </summary>
/// <param name="references">The assembly references.</param>
/// <param name="sourceCode">The source code to compile.</param>
/// <param name="outputAssemblyName">Output dll name.</param>
/// <returns>Compilation result</returns>
private CompilerResults ProduceAssembly(string[] references,
string sourceCode,
string outputAssemblyName)
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler codeCompiler = codeProvider.CreateCompiler();
CompilerParameters compilerParameters =
new CompilerParameters(references,
outputAssemblyName);
compilerParameters.GenerateExecutable = false;
compilerParameters.GenerateInMemory = false;
return codeCompiler.CompileAssemblyFromSource(compilerParameters,
sourceCode);
}
/// <summary>
/// Creates new object from dynamicaly loaded assembly
/// </summary>
/// <param name="AssemblyName">Name of the assembly to load.</param>
/// <param name="className">Name of the class to instanciate.</param>
/// <param name="constructorParameters">The constructor parameters.</param>
private bool CreateObjectFromAssembly(string AssemblyName,
string className,
object[] constructorParameters,
out object createdObject)
{
object tmp = createdObject = null;
Assembly myAssembly = Assembly.LoadFrom(AssemblyName);
Module[] myModules = myAssembly.GetModules();
myModules.Where(module => module.Name == AssemblyName)
.Select(module => module.GetTypes())
.ToList()
.ForEach
(
t => t.Where(types => types.Name == className)
.ToList()
.ForEach(
type => tmp = Activator.CreateInstance(type,
constructorParameters))
);
createdObject = tmp;
return createdObject != null;
}