Exemplo n.º 1
0
        public void Generate()
        {
            IAssemblySource    assemblySource = _codeGenerator.ExecutePlugins(_plugins, "/*", "*/", new InitialCodeGenerator());
            CompilerParameters parameters     = new CompilerParameters
            {
                GenerateExecutable      = false,
                GenerateInMemory        = false,
                OutputAssembly          = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Generated", assemblyName + ".dll"),
                IncludeDebugInformation = true,
                CompilerOptions         = "/optimize"
            };

            _assemblyGenerator.Generate(assemblySource, parameters);
        }
Exemplo n.º 2
0
        public void Generate()
        {
            IAssemblySource assemblySource = _codeGenerator.ExecutePlugins(_plugins, "/*", "*/", new InitialCodeGenerator());

            _logger.Trace("References: " + string.Join(", ", assemblySource.RegisteredReferences));
            _sourceLogger.Trace(assemblySource.GeneratedCode);
            CompilerParameters parameters = new CompilerParameters
            {
                GenerateExecutable      = false,
                GenerateInMemory        = false,
                OutputAssembly          = GetAssemblyPath(),
                IncludeDebugInformation = true,
                CompilerOptions         = ""
            };

            Console.WriteLine(GetAssemblyPath());
            _assemblyGenerator.Generate(assemblySource, parameters);
        }
Exemplo n.º 3
0
        private void GenerateObjectModel()
        {
            IAssemblySource assemblySource = _codeGenerator.ExecutePlugins(_pluginRepository, "/*", "*/", null);

            _log.GetLogger("Domain Object Model references").Trace(() => string.Join(", ", assemblySource.RegisteredReferences));
            _log.GetLogger("Domain Object Model source").Trace(assemblySource.GeneratedCode);

            CompilerParameters parameters = new CompilerParameters
            {
                GenerateExecutable      = false,
                GenerateInMemory        = string.IsNullOrEmpty(Paths.DomAssemblyName),
                OutputAssembly          = string.IsNullOrEmpty(Paths.DomAssemblyName) ? null : Path.Combine(Paths.BinFolder, Paths.DomAssemblyName + ".dll"),
                IncludeDebugInformation = true,
                CompilerOptions         = _domGeneratorOptions.Debug ? "" : "/optimize"
            };

            _objectModel = _assemblyGenerator.Generate(assemblySource, parameters);
        }
Exemplo n.º 4
0
        public void Generate()
        {
            var sourceFiles = _codeGenerator.ExecutePluginsToFiles(_pluginRepository, "/*", "*/", null);

            if (!string.IsNullOrEmpty(_buildEnvironment.GeneratedSourceFolder))
            {
                foreach (var sourceFile in sourceFiles)
                {
                    _sourceWriter.Add(sourceFile.Key + ".cs", sourceFile.Value.GeneratedCode);
                }
            }
            else
            {
                var targetAssemblies = sourceFiles
                                       .GroupBy(sourceFile => sourceFile.Key.Split('\\').First())
                                       .Select(sourceFileGroup => new
                {
                    Name           = sourceFileGroup.Key,
                    AssemblySource = new AssemblySource
                    {
                        GeneratedCode        = string.Join("\r\n", sourceFileGroup.OrderBy(sourceFile => sourceFile.Key).Select(sourceFile => sourceFile.Value.GeneratedCode)),
                        RegisteredReferences = sourceFileGroup.SelectMany(sourceFile => sourceFile.Value.RegisteredReferences).Distinct().OrderBy(name => name)
                    },
                    AssemblyFile = Paths.GetDomAssemblyFile((DomAssemblies)Enum.Parse(typeof(DomAssemblies), sourceFileGroup.Key)),
                })
                                       .ToList();

                Graph.SortByGivenOrder(targetAssemblies,
                                       new string[] { DomAssemblies.Model.ToString(), DomAssemblies.Orm.ToString(), DomAssemblies.Repositories.ToString() },
                                       targetAssembly => targetAssembly.Name);
                AddReferences(targetAssemblies[1].AssemblySource, new[] { targetAssemblies[0].AssemblyFile });
                AddReferences(targetAssemblies[2].AssemblySource, new[] { targetAssemblies[0].AssemblyFile, targetAssemblies[1].AssemblyFile });

                foreach (var targetAssembly in targetAssemblies)
                {
                    _assemblyGenerator.Generate(targetAssembly.AssemblySource, targetAssembly.AssemblyFile);
                }
            }
        }
Exemplo n.º 5
0
        public void CompileAll(IAssemblyGenerator generator)
        {
            foreach (var assemblyReference in this._assemblies)
            {
                generator.ReferenceAssembly(assemblyReference);
            }

            foreach (var generatedType in this.GeneratedTypes)
            {
                foreach (var x in generatedType.AssemblyReferences())
                {
                    generator.ReferenceAssembly(x);
                }

                // We generate the code for the type upfront as we allow adding namespaces etc. during the rendering of
                // frames so we need to do those, and _then_ gather namespaces
                // A rough estimate of 3000 characters per method with 2 being used, plus 1000 for ctor.
                var typeWriter = new SourceWriter((3000 * 2) + 1000);
                generatedType.Write(typeWriter);

                var namespaces = generatedType
                                 .AllInjectedFields
                                 .Select(x => x.VariableType.Namespace)
                                 .Concat(new[] { typeof(Task).Namespace })
                                 .Concat(generatedType.Namespaces)
                                 .Distinct()
                                 .ToList();

                var writer = new SourceWriter();

                writer.Comment("<auto-generated />");
                writer.Comment(generatedType.TypeName);
                writer.BlankLine();

                foreach (var ns in namespaces.OrderBy(x => x))
                {
                    writer.UsingNamespace(ns);
                }

                writer.BlankLine();

                writer.Namespace(generatedType.Namespace);

                writer.WriteLines(typeWriter.Code());

                writer.FinishBlock();

                var code = writer.Code();

                generatedType.SourceCode = code;
                generator.AddFile($"{generatedType.Namespace.Replace(".", "/")}/{generatedType.TypeName}.cs", code);
            }

            var assembly = generator.Generate(this._generationRules);

            var generated = assembly.GetExportedTypes().ToArray();

            foreach (var generatedType in this.GeneratedTypes)
            {
                generatedType.FindType(generated);
            }
        }