Esempio n. 1
0
        /// <summary>
        ///   Finds the source files.
        /// </summary>
        /// <param name = "rulesets">The rulesets.</param>
        /// <param name = "allSourceFiles">All source files.</param>
        /// <param name = "rulesDirectory">The rules directory.</param>
        /// <returns></returns>
        public static Boolean FindSourceFiles(ruleSet[] rulesets, List <string> allSourceFiles,
                                              string rulesDirectory)
        {
            var filesFound = true;

            foreach (var a in rulesets.Where(a => a != null))
            {
                foreach (var file in a.recognizeSourceFiles)
                {
                    var fileLower = file.ToLower();
                    if (File.Exists(rulesDirectory + fileLower))
                    {
                        if (!allSourceFiles.Contains(rulesDirectory + fileLower))
                        {
                            allSourceFiles.Add(rulesDirectory + fileLower);
                        }
                    }
                    else
                    {
                        SearchIO.MessageBoxShow("Missing source file: " + fileLower +
                                                ". Cancelling compilation of C# recognize source file.",
                                                "Missing File", "Error");
                        filesFound = false;
                        break;
                    }
                }
                foreach (var file in a.applySourceFiles)
                {
                    var fileLower = file.ToLower();
                    if (File.Exists(rulesDirectory + fileLower))
                    {
                        if (!allSourceFiles.Contains(rulesDirectory + fileLower))
                        {
                            allSourceFiles.Add(rulesDirectory + fileLower);
                        }
                    }
                    else
                    {
                        SearchIO.MessageBoxShow("Missing source file: " + fileLower +
                                                ". Cancelling compilation of C# apply source file.",
                                                "Missing File", "Error");
                        filesFound = false;
                        break;
                    }
                }
            }
            return(filesFound);
        }
Esempio n. 2
0
        /// <summary>
        ///   Compiles the source files.
        /// </summary>
        /// <param name = "rulesets">The rulesets.</param>
        /// <param name = "allSourceFiles">All source files.</param>
        /// <param name = "cr">The cr.</param>
        /// <param name = "rulesDir">The rules dir.</param>
        /// <param name = "execDir">The exec dir.</param>
        /// <param name = "compiledparamRules">The compiledparam rules.</param>
        /// <returns></returns>
        public static Boolean CompileSourceFiles(ruleSet[] rulesets, List <string> allSourceFiles,
                                                 out CompilerResults cr, string rulesDir, string execDir,
                                                 string compiledparamRules)
        {
            cr = null;
            try
            {
                var c = new CSharpCodeProvider();
                // c.CreateCompiler();
                //                ICodeCompiler icc = c.CreateCompiler();
                var cp = new CompilerParameters();

                cp.ReferencedAssemblies.Add("system.dll");
                cp.ReferencedAssemblies.Add("system.xml.dll");
                cp.ReferencedAssemblies.Add("system.data.dll");
                cp.ReferencedAssemblies.Add("system.windows.forms.dll");
                //cp.ReferencedAssemblies.Add(execDir + "GraphSynth.exe");
                cp.ReferencedAssemblies.Add(execDir + "GraphSynth.BaseClasses.dll");

                cp.CompilerOptions  = "/t:library";
                cp.GenerateInMemory = true;
                cp.OutputAssembly   = rulesDir + compiledparamRules;
                var allSourceFilesArray = allSourceFiles.ToArray();

                cr = c.CompileAssemblyFromFile(cp, allSourceFilesArray);

                //cr = icc.CompileAssemblyFromFileBatch(cp, allSourceFilesArray);
                if (cr.Errors.HasErrors)
                {
                    throw new Exception();
                }
                return(true);
            }
            catch
            {
                SearchIO.MessageBoxShow("Error Compiling C# recognize and apply source files.",
                                        "Compilation Error", "Error");
                foreach (CompilerError e in cr.Errors)
                {
                    SearchIO.output(e.ToString());
                }
                return(false);
            }
        }
Esempio n. 3
0
        /// <summary>
        ///   Loads and compiles the source files.
        /// </summary>
        /// <param name = "rulesets">The rulesets.</param>
        /// <param name = "recompileRules">if set to <c>true</c> [recompile rules].</param>
        /// <param name = "compiledparamRules">The compiledparam rules.</param>
        /// <param name = "execDir">The exec dir.</param>
        public static void loadAndCompileSourceFiles(ruleSet[] rulesets, Boolean recompileRules,
                                                     string compiledparamRules, string execDir)
        {
#if NETSTANDARD2_0
            throw new NotImplementedException("There is currently no way to compile parametric rules in this version of GraphSynth.");
#else
            if (rulesets.GetLength(0) == 0)
            {
                return;
            }
            Assembly assem          = null;
            var      allSourceFiles = new List <string>();
            var      rulesDirectory = rulesets[0].rulesDir;

            if (!recompileRules && (compiledFunctionsAlreadyLoaded(rulesets)))
            {
                return;
            }
            if (recompileRules && FindSourceFiles(rulesets, allSourceFiles, rulesDirectory))
            {
                if (allSourceFiles.Count == 0)
                {
                    SearchIO.output("No additional code files to compile.", 4);
                }
                else
                {
                    CompilerResults cr;
                    if (CompileSourceFiles(rulesets, allSourceFiles, out cr,
                                           rulesDirectory, execDir, compiledparamRules))
                    {
                        assem = cr.CompiledAssembly;
                    }
                }
            }
            var filenames = new string[] { };
            if (assem == null)
            {
                /* load .dll since compilation crashed */
                filenames = Directory.GetFiles(rulesDirectory, "*" + compiledparamRules + "*");
                if (filenames.GetLength(0) > 1)
                {
                    SearchIO.MessageBoxShow("More than one compiled library (*.dll) similar to "
                                            + compiledparamRules + "in" + rulesDirectory);
                }
                if (filenames.GetLength(0) == 0)
                {
                    SearchIO.MessageBoxShow("Compiled library: " + compiledparamRules + " not found in\n"
                                            + rulesDirectory + ".\n Attempting to recompile.");
                    CompilerResults cr;
                    if (CompileSourceFiles(rulesets, allSourceFiles, out cr,
                                           rulesDirectory, execDir, compiledparamRules))
                    {
                        assem = cr.CompiledAssembly;
                    }
                }
                else
                {
                    assem = Assembly.LoadFrom(filenames[0]);
                }
            }
            try
            {
                if (assem != null)
                {
                    var compiledFunctions = assem.CreateInstance("GraphSynth.ParamRules.ParamRules");
                    foreach (var rule in rulesets.SelectMany(set => set.rules))
                    {
                        rule.DLLofFunctions = compiledFunctions;
                        rule.recognizeFuncs.Clear();
                        foreach (var functionName in rule.recognizeFunctions)
                        {
                            var func = compiledFunctions.GetType().GetMethod(functionName);
                            if (func != null)
                            {
                                rule.recognizeFuncs.Add(func);
                            }
                            else
                            {
                                SearchIO.MessageBoxShow("Unable to locate function, " + functionName + ", in assembly, " + filenames[0] + ".");
                            }
                        }
                        rule.applyFuncs.Clear();
                        foreach (var functionName in rule.applyFunctions)
                        {
                            var func = compiledFunctions.GetType().GetMethod(functionName);
                            if (func != null)
                            {
                                rule.applyFuncs.Add(func);
                            }
                            else
                            {
                                SearchIO.MessageBoxShow("Unable to locate function, " + functionName + ", in assembly, " + filenames[0] + ".");
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                SearchIO.MessageBoxShow("Compilation Error :" + ErrorLogger.MakeErrorString(e, false),
                                        "Error Compiling Additional Rule Functions", "Error");
            }
#endif
        }