Exemple #1
0
        /// <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);
                }
            }
        }