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();
     }
 }