public Assembly Execute(ExtensionsCompilerConsoleProgramArgs args) { WriteLog("start to process with arguments: " + args); var provider = new ExtensionsFileSystemProvider(args.Root, args.Web, args.DllName){WriteLog=s => WriteLog("\tfs:: "+s)}; if (provider.IsNeedRecompile()) { WriteLog("need to recompile, start compiler..."); new ExtensionsCompilerExecutor(s => WriteLog("\texec:: "+s)).Compile(provider); WriteLog("compilation finished"); }else { WriteLog("no recompilation needed"); } WriteLog("start load assembly"); var result = provider.LoadAssembly(); WriteLog("assembly loaded"); return result; }
public Assembly Compile(ExtensionsFileSystemProvider provider) { var compiler = new BooCompiler(); var pipeline = Pipeline ??( Pipeline = new CompileToFile()); ExtensionsPreprocessorCompilerStep.Extend(pipeline); compiler.Parameters.Pipeline = pipeline; var files = provider.GetFileNames(); if(files.Length==0) { WriteLog("no input files provided"); } foreach (var fileName in files) { WriteLog("input added: " + fileName); compiler.Parameters.Input.Add(new FileInput(fileName)); } compiler.Parameters.References.Add(typeof (IRegistryLoader).Assembly); //need to use Comdiv.Core compiler.Parameters.References.Add(typeof (IDictionary<string, object>).Assembly); //need to use System WriteLog("compiler created"); //loading other dlls: foreach (var referencedAssembly in provider.GetReferencedAssemblies()) { WriteLog("add assembly " + referencedAssembly.GetName().Name); compiler.Parameters.References.Add(referencedAssembly); } compiler.Parameters.OutputAssembly = provider.GetLibraryPath(); WriteLog("output is setted : " + provider.GetLibraryPath()); WriteLog("start compiler"); var result = compiler.Run(); LastCompiledContext = result; if (result.Errors.Count != 0) { WriteLog("error occured!"); WriteLog(result.Errors.ToString()); ConsoleLogHost.Current.logerror(result.Errors.ToString()); throw new CompilerErrorException(result); } //if (result.Warnings.Count != 0) //{ // WriteLog("warrnings!"); // WriteLog(result.Warnings.ToString()); //} WriteLog("compilation successfull"); if(Pipeline is CompileToMemory) { return result.GeneratedAssembly; }else { return provider.LoadAssembly(); } }