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();
     }
 }
 public void setup() {
     //first cleanup files
     cleanup();
     this.fs = new ExtensionsFileSystemProvider();
     myapp.files.Write("~/extensions/a.boo");
     myapp.files.Write("~/extensions/b.boo");
     myapp.files.Write("~/extensions/c.boo");
     myapp.files.Write("~/extensions/d.boo");
     myapp.files.Write("~/sys/extensions/a.boo");
     myapp.files.Write("~/sys/extensions/b.boo");
     myapp.files.Write("~/sys/extensions/c.boo");
     myapp.files.Write("~/usr/extensions/a.boo");
     myapp.files.Write("~/usr/extensions/b.boo");
     myapp.files.Delete(fs.GetHashPath());
     
     myapp.files.Delete(fs.GetLibraryPath());
 }