/// <summary> /// Generates the assembly from the specified CodeGen configuration. /// </summary> /// <param name="xmlConfig">The CodeGen configuration.</param> /// <param name="assemblyPath">The output assembly path.</param> public void GenerateAssembly(XmlConfig xmlConfig, string assemblyPath) { using (StringWriter errorOutput = new StringWriter()) { TextWriter consoleOut = Console.Out; try { Console.SetOut(TextWriter.Null); xmlConfig.MultiFileExport = false; Initialize(xmlConfig, TextWriter.Null, errorOutput); // Generate user types GenerateUserTypes(); // Throw exception if there was an error StringBuilder sb = errorOutput.GetStringBuilder(); if (sb.Length > 0) { throw new Exception(sb.ToString()); } if (!xmlConfig.GenerateAssemblyWithILWriter) { string code = GenerateSingleFile(); var syntaxTrees = new List <SyntaxTree>(); syntaxTrees.Add(CSharpSyntaxTree.ParseText(code, path: "AutoGeneratedFile.cs", encoding: UTF8Encoding.Default)); using (FileStream dllStream = new FileStream(assemblyPath, FileMode.CreateNew)) { errorLogger = errorOutput; if (!GenerateRoslynAssembly(syntaxTrees, dllStream, null)) { throw new Exception(errorOutput.GetStringBuilder().ToString()); } } } else { codeWriter.GenerateBinary(userTypes, xmlConfig.GeneratedAssemblyName, !xmlConfig.DisablePdbGeneration, dependentAssemblies.Select(da => ResolveAssemblyPath(da))); } } finally { Console.SetOut(consoleOut); } } }