/// <summary> /// Creates the dynamic assembly. /// </summary> /// <param name="provider">The provider.</param> /// <param name="referencedAssemblies">The referenced assemblies.</param> /// <param name="namespace">The namespace.</param> /// <param name="usingNameSpaces">The using nameSpaces.</param> /// <param name="classCodesToCompile">The class codes to compile.</param> /// <returns>Assembly.</returns> /// <exception cref="OperationFailureException">CompileAssemblyFromSource;null</exception> public SandboxAssembly CreateDynamicAssembly(CodeDomProvider provider, List<string> referencedAssemblies, string @namespace, IEnumerable<string> usingNameSpaces, string classCodesToCompile) { try { provider.CheckNullObject("provider"); classCodesToCompile.CheckEmptyString("classCodesToCompile"); @namespace = @namespace.SafeToString("Beyova.DynamicCompile.Sandbox"); var objCompilerParameters = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true }; // Prepare references. var references = GetCommonAssemblyNameList(); if (referencedAssemblies.HasItem()) { references.AddRange(referencedAssemblies); } objCompilerParameters.ReferencedAssemblies.AddRange(references.ToArray()); // Prepare references done. // Prepare namespace var nameSpaces = GetCommonNamespaces(); if (usingNameSpaces.HasItem()) { nameSpaces.AddRange(usingNameSpaces); } // Prepare namespace done; StringBuilder builder = new StringBuilder(512); foreach (var one in nameSpaces) { builder.AppendLineWithFormat("using {0};", one); } builder.AppendLineWithFormat("namespace {0}", @namespace); //Namespace start builder.AppendLine("{"); builder.AppendLine(classCodesToCompile); //End of namespace builder.Append("}"); var compilerResult = provider.CompileAssemblyFromSource(objCompilerParameters, classCodesToCompile); if (compilerResult.Errors.HasErrors) { List<dynamic> errors = new List<dynamic>(); foreach (CompilerError one in compilerResult.Errors) { errors.Add(new { one.ErrorText, one.ErrorNumber, one.Line }); } throw new OperationFailureException("CompileAssemblyFromSource", null, errors); } return new SandboxAssembly(compilerResult.CompiledAssembly, @namespace); } catch (Exception ex) { throw ex.Handle("CreateDynamicAssembly"); } }