Пример #1
0
        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);
            }
        }