private Script BuildScript(FileInfo file, BuildOptions buildOptions) { Script script = (Script)null; Global.ToolWindowManager.ClearErrorList(); Console.WriteLine(string.Format("Building script {0}...", file.Name)); Global.EditorManager.Save(file); CompilingServices compilingServices = new CompilingServices(CodeHelper.GetCodeLang(file)); if (buildOptions != null) { foreach (BuildReference buildReference in buildOptions.GetReferences()) { if (buildReference.Valid) { compilingServices.AddReference(buildReference.Path); } } } compilingServices.AddFile(file.FullName); CompilerResults compilerResults = compilingServices.Compile(); if (compilerResults.Errors.HasErrors) { Console.WriteLine("Built with errors."); this.OnBuildErrors(compilerResults.Errors); return(null); } else { if (compilerResults.Errors.HasWarnings) { Console.WriteLine("Built with warnings."); this.OnBuildErrors(compilerResults.Errors); } System.Type type1 = (System.Type)null; foreach (System.Type type2 in compilerResults.CompiledAssembly.GetTypes()) { if (type2.IsSubclassOf(typeof(Script))) { type1 = type2; break; } } if (type1 == null) { Console.WriteLine("Built with errors."); this.OnBuildErrors(new CompilerErrorCollection() { new CompilerError(file.FullName, 1, 1, "", "Script is not found, make sure that the code contains a class derived from the OpenQuant.API.Script class") }); } else { script = Activator.CreateInstance(type1, false) as Script; if (Application.OpenForms.Count > 0) { typeof(Script).GetField("mainForm", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField).SetValue((object)script, (object)Application.OpenForms[0]); } ++this.scriptID; Console.WriteLine("Build succeeded."); } return(script); } }