示例#1
0
        ///
        /// <summary>
        ///	Fetch the Code Provider for the language specified by the 'language' members.
        /// </summary>
        ///
        private CodeDomProvider GetProvider()
        {
            CodeDomProvider provider;
            Type            type;

            switch (language.ToUpper())
            {
            case "CS":
                provider = new CSharpCodeProvider();
                break;

            case "VB":
                provider = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case "BOO":
                type = Type.GetType("Boo.Lang.CodeDom.BooCodeProvider, Boo.Lang.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67");
                if (type != null)
                {
                    return((CodeDomProvider)Activator.CreateInstance(type));
                }
                throw new Exception("Boo.Lang.CodeDom.BooCodeProvider not available");

            default:
                type = Type.GetType(language);
                if (type != null)
                {
                    return((CodeDomProvider)Activator.CreateInstance(type));
                }
                throw new Exception("Unknown language");
            }
            return(provider);
        }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             if (_csStatement != null)
                 using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                 {
                     System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                     using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                     {
                         provider.GenerateCodeFromStatement(_csStatement, tw, opts);
                         Value = tw.InnerWriter.ToString();
                     }
                 }
             break;
         case CodeDomGenerator.Language.VB:
             if (_vbStatement != null)
                 using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                 {
                     System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                     using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                     {
                         provider.GenerateCodeFromStatement(_vbStatement, tw, opts);
                         Value = tw.InnerWriter.ToString();
                     }
                 }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("continue;");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("Continue For");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
示例#4
0
        // public ���\�b�h
        public void CompileFile(string filePath)
        {
            if(!File.Exists(filePath)){
                throw new Exception("�t�@�C��������܂��� : " + filePath);
            }

            CodeDomProvider myCompiler;
            string ext = Path.GetExtension(filePath).ToLower();
            switch(ext){
            case JsExt:
                myCompiler = new Microsoft.JScript.JScriptCodeProvider();
                break;
            case CsExt:
                myCompiler = new Microsoft.CSharp.CSharpCodeProvider();
                break;
            case VbExt:
                myCompiler = new Microsoft.VisualBasic.VBCodeProvider();
                break;
            default:
                throw new Exception("���Ή��̃t�@�C���g���q�ł�: " + filePath);
            }

            myPluginDllPath = mySetting.TemplateDir + Path.GetFileNameWithoutExtension(filePath) + ".dll";
            string code = Util.LoadFile(filePath);

            CompilerParameters cp = new CompilerParameters();
            cp.GenerateExecutable = true;
            cp.OutputAssembly = myPluginDllPath;
            CompilerResults cr = myCompiler.CompileAssemblyFromSource(cp, code);
            foreach(string s in cr.Output){
                Console.WriteLine(s);
            }

            myCompiler.Dispose();
        }
示例#5
0
        public void GeneratesVBCodeWithoutLocalizer(string file, string fileNamespace, string resourceNamespace, MemberAttributes accessModifiers, Type customToolType)
        #endif
        {
            var provider = new Microsoft.VisualBasic.VBCodeProvider( );
            var builder  = GenerateBuilder(provider,
                                           file,
                                           fileNamespace,
                                           resourceNamespace,
                                           accessModifiers,
                                           customToolType);

            builder.Settings.ConfigureWithoutLocalizer(resourceNamespace + '.' + builder.Settings.ClassName);

            #if NET461
            var compiler   = new VBCodeProvider(new XunitCompilerSettings(Language.VisualBasic));
            var parameters = GenerateCompilerParameters("System.dll",
                                                        "System.Drawing.dll",
                                                        "System.Web.dll");
            var compilation = GenerateCodeThenCompile(builder,
                                                      provider,
                                                      compiler,
                                                      parameters);

            Assert.Empty(compilation.Errors);
            #else
            Assert.NotEmpty(GenerateCode(builder, provider));
            #endif
        }
示例#6
0
        public void GeneratesVBCodeForXamarinForms(string file, string fileNamespace, string resourceNamespace, MemberAttributes accessModifiers, Type customToolType)
        #endif
        {
            var provider = new Microsoft.VisualBasic.VBCodeProvider( );
            var builder  = GenerateBuilder(provider,
                                           file,
                                           fileNamespace,
                                           resourceNamespace,
                                           accessModifiers,
                                           customToolType);

            builder.Settings.ConfigureResourceManager(resourceNamespace + '.' + Path.GetFileNameWithoutExtension(file));
            builder.Settings.Extension = ResourceTypeExtension.XamarinForms;

            #if NET461
            var compiler   = new VBCodeProvider(new XunitCompilerSettings(Language.VisualBasic));
            var parameters = GenerateCompilerParameters("netstandard.dll",
                                                        "System.dll",
                                                        "System.Drawing.dll",
                                                        "System.Web.dll",
                                                        "Xamarin.Forms.Core.dll",
                                                        "Linguist.dll",
                                                        "Linguist.Xamarin.Forms.dll");
            var compilation = GenerateCodeThenCompile(builder,
                                                      provider,
                                                      compiler,
                                                      parameters);

            Assert.Empty(compilation.Errors);
            #else
            Assert.NotEmpty(GenerateCode(builder, provider));
            #endif
        }
示例#7
0
        public void GeneratesVBCodeForWPF(string file, string fileNamespace, string resourceNamespace, MemberAttributes accessModifiers, Type customToolType)
        #endif
        {
            var provider = new Microsoft.VisualBasic.VBCodeProvider( );
            var builder  = GenerateBuilder(provider,
                                           file,
                                           fileNamespace,
                                           resourceNamespace,
                                           accessModifiers,
                                           customToolType);

            builder.Settings.ConfigureResourceManager(resourceNamespace + '.' + builder.Settings.ClassName);
            builder.Settings.Extension = ResourceTypeExtension.WPF;

            #if NET461
            var compiler   = new VBCodeProvider(new XunitCompilerSettings(Language.VisualBasic));
            var parameters = GenerateCompilerParameters("System.dll",
                                                        "System.Drawing.dll",
                                                        "System.Web.dll",
                                                        "System.Xaml.dll",
                                                        PresentationCoreDll,
                                                        PresentationFrameworkDll,
                                                        WindowsBaseDll,
                                                        "Linguist.dll",
                                                        "Linguist.WPF.dll");
            var compilation = GenerateCodeThenCompile(builder,
                                                      provider,
                                                      compiler,
                                                      parameters);

            Assert.Empty(compilation.Errors);
            #else
            Assert.NotEmpty(GenerateCode(builder, provider));
            #endif
        }
示例#8
0
        /// <summary>
        /// Writes the code to string in the specific language
        /// and returns the string
        /// </summary>
        public static string Create(Language language, string expression, RegexOptions options)
        {
            CodeCompileUnit unit = Create(expression, options);

            System.Text.StringBuilder builder = new System.Text.StringBuilder();

            using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(builder))
            {
                System.CodeDom.Compiler.ICodeGenerator generator;

                switch (language)
                {
                case Language.CSharp:
                    System.CodeDom.Compiler.CodeGeneratorOptions genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    genOptions.BracingStyle = "C";
                    generator = new Microsoft.CSharp.CSharpCodeProvider().CreateGenerator();
                    generator.GenerateCodeFromCompileUnit(unit, stringWriter, genOptions);
                    break;

                case Language.VisualBasic:
                    generator = new Microsoft.VisualBasic.VBCodeProvider().CreateGenerator();
                    generator.GenerateCodeFromCompileUnit(unit, stringWriter, null);
                    break;
                }

                return(builder.ToString());
            }
        }
示例#9
0
        /// <summary>
        /// Creates a function to be evaluated.
        /// </summary>
        /// <param name="_input"></param>
        /// <returns></returns>
        public static FunctionBaseCore CreateFunction(string _input)
        {
            Microsoft.VisualBasic.VBCodeProvider codecompiler = new Microsoft.VisualBasic.VBCodeProvider();
            CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

            CodeNamespace dom_namespace = pGetNameSpace();
            CodeTypeDeclaration dom_class = pGetClass();
            CodeMemberMethod dom_func = pGetFunc(_input);

            dom_class.Members.Add(dom_func);
            dom_namespace.Types.Add(dom_class);
            ccu.Namespaces.Add(dom_namespace);

            CompilerParameters paras = pGetPara();
            CompilerResults output = codecompiler.CompileAssemblyFromDom(paras, ccu);

            foreach (CompilerError CE in output.Errors)
            {
            }

            //pGetCompileCode(codecompiler, ccu);

            Assembly codebase = output.CompiledAssembly;
            object classbase = codebase.CreateInstance("DOMSpace.DOMClass");
            Type func_class = codebase.GetModules()[0].GetType("DOMSpace.DOMClass");
            Type[] temp = codebase.GetModules()[0].GetTypes();
            MethodInfo invoker = func_class.GetMethod("DOMfunc");

            pGetCompileCode(codecompiler, ccu);

            return new FunctionBaseCore(classbase, invoker);
        }
示例#10
0
        public TomoFormula CreateFromString(string source)
        {
            TomoFormula retVal       = null;
            bool        isCsharpCode = IsCsharpCode(source);

            if (isCsharpCode)
            { // Expected Language: C#
                Microsoft.CSharp.CSharpCodeProvider csProviderOnEarlyNodeCode = null;
                CompileCS(source, out csProviderOnEarlyNodeCode);
                if (csProviderOnEarlyNodeCode == null)
                {
                    return(null);
                }
                if (results == null)
                {
                    return(null);
                }
                System.Reflection.Assembly mCAssembly = null;
                mCAssembly = results.CompiledAssembly;
                retVal     = (TomoFormula)mCAssembly.CreateInstance("CSTomoFormula");
            }
            else
            { // Exprected Language VB
                Microsoft.VisualBasic.VBCodeProvider vbProviderOnEarlyNodeCode = null;
                CompileVB(source, out vbProviderOnEarlyNodeCode);
                if (vbProviderOnEarlyNodeCode == null)
                {
                    return(null);
                }
                System.Reflection.Assembly mCAssembly = null;
                mCAssembly = results.CompiledAssembly;
                retVal     = (TomoFormula)mCAssembly.CreateInstance("VBTomoFormula");
            }
            return(retVal);
        }
        static void CompileCode(CodeCompileUnit ccu, string sourceName)
        {
            CodeDomProvider provider   = null;
            FileInfo        sourceFile = new FileInfo(sourceName);

            // Select the code provider based on the input file extension, either C# or Visual Basic.
            if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
            {
                provider = new Microsoft.CSharp.CSharpCodeProvider();
            }
            else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
            {
                provider = new Microsoft.VisualBasic.VBCodeProvider();
            }
            else
            {
                Console.WriteLine("Source file must have a .cs or .vb extension");
            }
            if (provider != null)
            {
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                // Set code formatting options to your preference.
                options.BlankLinesBetweenMembers = true;
                options.BracingStyle             = "C";

                StreamWriter sw = new StreamWriter(sourceName);
                provider.GenerateCodeFromCompileUnit(ccu, sw, options);
                sw.Close();
            }
        }
示例#12
0
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("var {0} = ", provider.CreateEscapedIdentifier(VariableName));
                     provider.GenerateCodeFromExpression(InitExpression, tw, opts);
                     tw.Write(";");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("Dim {0} = ", provider.CreateEscapedIdentifier(VariableName));
                     provider.GenerateCodeFromExpression(InitExpression, tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
示例#13
0
 protected override void RefreshValue()
 {
     using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
     {
         System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
         using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
         {
             tw.Write("SyncLock ");
             if (LockExpression != null)
             {
                 provider.GenerateCodeFromExpression(LockExpression, tw, opts);
             }
             tw.WriteLine();
             tw.Indent++;
             if (Statements != null)
             {
                 foreach (CodeStatement statement in Statements)
                 {
                     provider.GenerateCodeFromStatement(statement, tw, opts);
                 }
             }
             tw.Indent--;
             tw.Write("End SyncLock");
             Value = tw.InnerWriter.ToString();
         }
     }
 }
示例#14
0
 private void GenerateVB()
 {
     using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
     {
         CodeGeneratorOptions opts = new CodeGeneratorOptions();
         StringWriter         sw   = new StringWriter();
         if (_method.Statements.Count > 0)
         {
             _method.Attributes = MemberAttributes.Private;
             provider.GenerateCodeFromMember(_method, sw, opts);
             Text = sw.GetStringBuilder().ToString();
         }
         else
         {
             provider.GenerateCodeFromMember(_method, sw, opts);
             StringReader sr   = new StringReader(sw.GetStringBuilder().ToString());
             string       line = sr.ReadLine();
             while (string.IsNullOrEmpty(line))
             {
                 line = sr.ReadLine();
             }
             int idx = line.IndexOf(" " + _method.Name + "(");
             idx  = line.LastIndexOf(' ', idx - 1);
             Text = "Partial Private" + line.Remove(0, idx);
             Text = sw.GetStringBuilder().Replace(line, Text).ToString();
         }
     }
 }
示例#15
0
        private void GenerateVB()
        {
            IMemberOperatorGenerator gen = null;

            switch (Operator)
            {
            case OperatorType.Explicit:
                gen = new ExplicitOperatorGeneratorVB();
                break;

            case OperatorType.Implicit:
                gen = new ImplicitOperatorGeneratorVB();
                break;

            default:
                throw new NotImplementedException(string.Format("Какая-то несанкционированная xуйня"));
            }

            using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
            {
                System.CodeDom.Compiler.CodeGeneratorOptions opts = new CodeGeneratorOptions();
                using (System.CodeDom.Compiler.IndentedTextWriter tw = new IndentedTextWriter(new StringWriter(), opts.IndentString))
                {
                    gen.GenerateDeclaration(tw, provider, opts, ReturnType, Parameters);
                    tw.Indent++;
                    gen.GenerateStatemets(tw, provider, opts, Statements);
                    tw.Indent--;
                    tw.WriteLine("End Operator");
                    Text = tw.InnerWriter.ToString();
                }
            }
        }
示例#16
0
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("var {0} = ", provider.CreateEscapedIdentifier(VariableName));
                        provider.GenerateCodeFromExpression(InitExpression, tw, opts);
                        tw.Write(";");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("Dim {0} = ", provider.CreateEscapedIdentifier(VariableName));
                        provider.GenerateCodeFromExpression(InitExpression, tw, opts);
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
示例#17
0
        private static Assembly CompileWithReferences(string sourcecode,CompileLanguage language, string[] references)
        {
            CodeDomProvider comp =null;
            switch (language ){
                case CompileLanguage.VisualBasic:
                    comp = new Microsoft.VisualBasic.VBCodeProvider();
                    break;
                case CompileLanguage.CSharp:
                default:
                    comp = new CSharpCodeProvider();
                    break;
            }
            CompilerParameters cp = new CompilerParameters();
            foreach (string reference in references)
            {
                cp.ReferencedAssemblies.Add(reference);
            }
            cp.GenerateInMemory = true;

            CompilerResults cr = comp.CompileAssemblyFromSource(cp, sourcecode);
            if (cr.Errors.HasErrors)
            {
                string error = string.Empty;
                foreach (CompilerError err in cr.Errors)
                {
                    error += err.ErrorText + System.Environment.NewLine;
                }
                System.Diagnostics.Trace.WriteLine(error);
                return null;
            }

            return cr.CompiledAssembly;
        }
示例#18
0
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("break;");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("Exit Do");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
示例#19
0
        /// <summary>
        /// Writes the code to string in the specific language
        /// and returns the string
        /// </summary>
        public static string Create(Language language, string expression, RegexOptions options)
        {
            CodeCompileUnit unit = Create(expression, options);

            System.Text.StringBuilder builder = new System.Text.StringBuilder();

            using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(builder))
            {
                System.CodeDom.Compiler.ICodeGenerator generator;

                switch (language)
                {
                    case Language.CSharp:
                        System.CodeDom.Compiler.CodeGeneratorOptions genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        genOptions.BracingStyle = "C";
                        generator = new Microsoft.CSharp.CSharpCodeProvider().CreateGenerator();
                        generator.GenerateCodeFromCompileUnit(unit, stringWriter, genOptions);
                        break;
                    case Language.VisualBasic:
                        generator = new Microsoft.VisualBasic.VBCodeProvider().CreateGenerator();
                        generator.GenerateCodeFromCompileUnit(unit, stringWriter, null);
                        break;
                }

                return builder.ToString();
            }
        }
示例#20
0
        /// <summary>
        /// 编译指定脚本源码,返回编译结果
        /// </summary>
        /// <param name="source">源码</param>
        /// <param name="language">语言</param>
        /// <param name="outputFile">输出程序集文件</param>
        /// <returns>ScriptAgent的编译结果对象(永不为null)</returns>
        public CompileResults CompileScript(string source, ScriptLanguage language, string outputFile)
        {
            CodeDomProvider provider = null;

            switch (language)
            {
            case ScriptLanguage.VBNET:
                provider = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case ScriptLanguage.CSharp:
                provider = new Microsoft.CSharp.CSharpCodeProvider();
                break;
            }

            CompilerParameters param = this.GetCompilerParameters(outputFile);

            if (param == null)
            {
                return(new CompileResults());
            }
            string          szAssemblyDescriptor = this.GetScriptAssemblyDescriptor(language);
            CompilerResults results = null;

            try
            {
                source  = this.FormatScript(source, language);
                results = provider.CompileAssemblyFromSource(param, szAssemblyDescriptor, source);
            }
            catch (Exception ex)
            {
                LogManager.Instance.WriteLog("ScriptCompiler.CompileScript", ex);
            }
            return(this.GetCompileResults(results));
        }
 private static CodeDomProvider GetCodeDomProvider(string fileExtension)
 {
     CodeDomProvider cdp;
     switch (fileExtension)
     {
         case ".fsx":
             cdp = CodeDomProvider.CreateProvider("f#");
             break;
         case ".csx":
             cdp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v3.5" } });
             break;
         case ".vbx":
             cdp = new Microsoft.VisualBasic.VBCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v3.5" } });
             break;
         case ".jsx":
             // Have to figure out better JS support
             cdp = CodeDomProvider.CreateProvider("js");
             break;
         default:
             if (CodeDomProvider.IsDefinedExtension(fileExtension))
             {
                 cdp = CodeDomProvider.CreateProvider(CodeDomProvider.GetLanguageFromExtension(fileExtension));
             }
             else
             {
                 throw new ScriptDoesNotCompileException("Unknown extension.");
             }
             break;
     }
     return cdp;
 }
示例#22
0
        /// <summary>
        /// Compile a script, using the source and reference assemblies specified.  The return value will have the executable object
        /// and any errors encountered.
        /// </summary>
        /// <param name="Source">The source to compile as a string.</param>
        /// <param name="Reference">array of strings, each representing an assebmly or namespace to include.</param>
        /// <param name="Language">The Languages enumeration value for the code language.</param>
        /// <param name="DebugInformation">Whether to include debug information in the compiled object.</param>
        /// <returns></returns>
        public static CompilerResults CompileScript(string Source, string[] Reference, Languages Language, bool DebugInformation)
        {
            CodeDomProvider provider = null;
            CompilerResults results;

            switch (Language)
            {
            case Languages.VBnet:
                provider = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case Languages.CSharp:
                provider = new Microsoft.CSharp.CSharpCodeProvider();
                break;
            }

            // Configure parameters
            CompilerParameters parms = new CompilerParameters();

            parms.GenerateExecutable      = false;
            parms.GenerateInMemory        = true;
            parms.IncludeDebugInformation = DebugInformation;
            if (Reference != null)
            {
                foreach (string r in Reference)
                {
                    parms.ReferencedAssemblies.Add(r);
                }
            }

            // Compile
            results = provider.CompileAssemblyFromSource(parms, Source);

            return(results);
        }
        private void GenerateVB()
        {
            using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
            {
                CodeGeneratorOptions opts = new CodeGeneratorOptions();
                StringWriter         sw   = new StringWriter();
                provider.GenerateCodeFromMember(_property, sw, opts);
                StringReader sr   = new StringReader(sw.GetStringBuilder().ToString());
                string       line = sr.ReadLine();
                while (string.IsNullOrEmpty(line))
                {
                    line = sr.ReadLine();
                }

                int           idx   = line.IndexOf(" " + _property.Name + "(");
                int           asIdx = line.LastIndexOf(" As ");
                StringBuilder sb    = new StringBuilder();
                sb.Append((IsDefault?"Default ":string.Empty) + line.Substring(0, idx + _property.Name.Length + 2));
                foreach (CodeParameterDeclarationExpression parameter in Parameters)
                {
                    provider.GenerateCodeFromExpression(parameter, new StringWriter(sb), opts);
                    sb.Append(", ");
                }
                sb.Length -= 2;
                sb.Append(")").Append(line.Substring(asIdx));
                Text = sw.GetStringBuilder().Replace(line, sb.ToString()).ToString();
            }
        }
示例#24
0
            /// <summary>
            /// Initializes a new instance of the <see cref="CodeProvider" />
            /// for the specified <see cref="CodeLanguage" />.
            /// </summary>
            /// <param name="assemblyInfoTask">The <see cref="AssemblyInfoTask" /> for which an instance of the <see cref="CodeProvider" /> class should be initialized.</param>
            /// <param name="codeLanguage">The <see cref="CodeLanguage" /> for which an instance of the <see cref="CodeProvider" /> class should be initialized.</param>
            public CodeProvider(AssemblyInfoTask assemblyInfoTask, CodeLanguage codeLanguage)
            {
                CodeDomProvider provider = null;

                switch (codeLanguage)
                {
                case CodeLanguage.CSharp:
                    provider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;

                case CodeLanguage.JScript:
                    throw new NotSupportedException(ResourceUtils.GetString("NA2008"));

                case CodeLanguage.VB:
                    provider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;

                default:
                    throw new NotSupportedException(ResourceUtils.GetString("NA2007"));
                }

                _generator        = provider.CreateGenerator();
                _language         = codeLanguage;
                _assemblyInfoTask = assemblyInfoTask;
            }
            /// <summary>
            /// This method compiles the source given to it dynamically for use in plugins, etc...
            ///
            /// --== History of Changes ==--
            /// 11/05/2006 - Mike : Removed the compiler variable and called the provider method
            ///                     CompilerAssemblyFromFile directly.  I did this to remove a warning.
            /// </summary>
            /// <param name="strFile">The file we wish to compile</param>
            /// <param name="strReferenceAssembliesToAdd">Assemblies that need to be included in the compile</param>
            /// <returns>The results of the compile</returns>
            public System.CodeDom.Compiler.CompilerResults CompileSourceCode(string strFile, string[] strReferenceAssembliesToAdd)              // [DC]
            {
                //Currently only csharp scripting is supported
                CodeDomProvider provider;
                string          extension = Path.GetExtension(strFile);

                switch (extension)
                {
                case ".tmp":                                    // default tmp files to .cs
                case ".cs":
                case ".ncs":
                    provider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;

                case ".vb":
                case ".nvb":
                    provider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;

                case ".njs":
                case ".js":
                    provider = (CodeDomProvider)Activator.CreateInstance("Microsoft.JScript", "Microsoft.JScript.JScriptCodeProvider").Unwrap();
                    break;

                default:
                    throw new UnsupportedLanguageExecption(extension);
                }
                System.CodeDom.Compiler.CompilerParameters compilerparams = new System.CodeDom.Compiler.CompilerParameters();
                compilerparams.GenerateInMemory   = true;
                compilerparams.GenerateExecutable = true;

                // manually add references (since he nfr bellow system will need to be implemented a diferent way)
                compilerparams.ReferencedAssemblies.Add("System.dll");
                compilerparams.ReferencedAssemblies.Add("System.Windows.Forms.Dll");
                foreach (string strReferenceAssemblyToAdd in strReferenceAssembliesToAdd)
                {
                    compilerparams.ReferencedAssemblies.Add(strReferenceAssemblyToAdd);
                }
                // we don't use this (since the extra references are retrieved from the Xml file

                /*
                 *              //Add assembly references from nscript.nrf or <file>.nrf
                 *              string nrfFile = Path.ChangeExtension(strFile, "nrf");
                 *
                 *              if (File.Exists(nrfFile))
                 *                      AddReferencesFromFile(compilerparams, nrfFile);
                 *              else
                 *              {
                 *                      //Use nscript.nrf
                 *                      nrfFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "nscript.nrf");
                 *
                 *                      if (File.Exists(nrfFile))
                 *                              AddReferencesFromFile(compilerparams, nrfFile);
                 *              }
                 * */
                System.CodeDom.Compiler.CompilerResults crResults = provider.CompileAssemblyFromFile(compilerparams, strFile);

                return(crResults);
            }
示例#26
0
        /// <summary>
        /// Generates an Assembly from a script filename
        /// </summary>
        /// <param name="filename">The filename of the script</param>
        /// <param name="references">Assembly references for the script</param>
        /// <returns>The generated assembly</returns>
        public Assembly CreateAssembly(string filename, IList references)
        {
            // ensure that compilerErrors is null
            compilerErrors = null;

            string extension = Path.GetExtension(filename);

            // Select the correct CodeDomProvider based on script file extension
            CodeDomProvider codeProvider;

            switch (extension)
            {
            case ".cs":
                codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                break;

            case ".vb":
                codeProvider = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case ".js":
                codeProvider = new Microsoft.JScript.JScriptCodeProvider();
                break;

            default:
                throw new InvalidOperationException("Script files must have a .cs, .vb, or .js extension, for C#, Visual Basic.NET, or JScript respectively.");
            }

            //ICodeCompiler compiler = codeProvider.CreateCompiler();

            // Set compiler parameters
            var compilerParams = new CompilerParameters {
                CompilerOptions = "/target:library /optimize", GenerateExecutable = false, GenerateInMemory = true, IncludeDebugInformation = false
            };

            compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
            compilerParams.ReferencedAssemblies.Add("System.dll");

            // Add custom references
            foreach (string reference in references.Cast <string>().Where(reference => !compilerParams.ReferencedAssemblies.Contains(reference)))
            {
                compilerParams.ReferencedAssemblies.Add(reference);
            }

            // Do the compilation
            CompilerResults results = codeProvider.CompileAssemblyFromFile(compilerParams, filename);

            //Do we have any compiler errors
            if (results.Errors.Count > 0)
            {
                compilerErrors = results.Errors;
                throw new Exception(
                          "Compiler error(s) encountered and saved to AssemblyFactory.CompilerErrors");
            }

            Assembly createdAssembly = results.CompiledAssembly;

            return(createdAssembly);
        }
示例#27
0
        private bool LoadScript(string filename)
        {
            var compilerOptions = new System.CodeDom.Compiler.CompilerParameters();

            compilerOptions.CompilerOptions         = "/optimize";
            compilerOptions.GenerateInMemory        = true;
            compilerOptions.IncludeDebugInformation = true;
            compilerOptions.ReferencedAssemblies.Add("System.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Core.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Drawing.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            compilerOptions.ReferencedAssemblies.Add("System.XML.dll");
            compilerOptions.ReferencedAssemblies.Add("System.XML.Linq.dll");
            compilerOptions.ReferencedAssemblies.Add(typeof(Script).Assembly.Location);

            string extension = Path.GetExtension(filename);

            System.CodeDom.Compiler.CodeDomProvider compiler = null;

            if (extension.Equals(".cs", StringComparison.OrdinalIgnoreCase))
            {
                compiler = new Microsoft.CSharp.CSharpCodeProvider();
                compilerOptions.CompilerOptions += " /unsafe";
            }
            else if (extension.Equals(".vb", StringComparison.OrdinalIgnoreCase))
            {
                compiler = new Microsoft.VisualBasic.VBCodeProvider();
            }
            else
            {
                return(false);
            }

            System.CodeDom.Compiler.CompilerResults compilerResult = compiler.CompileAssemblyFromFile(compilerOptions, filename);

            if (!compilerResult.Errors.HasErrors)
            {
                Log("[INFO]", "Successfully compiled '", Path.GetFileName(filename), "'.");

                return(LoadAssembly(filename, compilerResult.CompiledAssembly));
            }
            else
            {
                var errors = new System.Text.StringBuilder();

                foreach (System.CodeDom.Compiler.CompilerError error in compilerResult.Errors)
                {
                    errors.Append("   at line ");
                    errors.Append(error.Line);
                    errors.Append(": ");
                    errors.Append(error.ErrorText);
                    errors.AppendLine();
                }

                Log("[ERROR]", "Failed to compile '", Path.GetFileName(filename), "' with ", compilerResult.Errors.Count.ToString(), " error(s):", Environment.NewLine, errors.ToString());

                return(false);
            }
        }
示例#28
0
        /// <summary>
        /// Compiles and load scripts from a C# or VB.NET source code file.
        /// </summary>
        /// <param name="filename">The path to the code file to load.</param>
        /// <returns><c>true</c> on success, <c>false</c> otherwise</returns>
        bool LoadScriptsFromSource(string filename)
        {
            var compilerOptions = new System.CodeDom.Compiler.CompilerParameters();

            compilerOptions.CompilerOptions         = "/optimize";
            compilerOptions.GenerateInMemory        = true;
            compilerOptions.IncludeDebugInformation = true;
            compilerOptions.ReferencedAssemblies.Add("System.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Core.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Drawing.dll");
            compilerOptions.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            compilerOptions.ReferencedAssemblies.Add("System.XML.dll");
            compilerOptions.ReferencedAssemblies.Add("System.XML.Linq.dll");
            // Reference the oldest scripting API to stay compatible with existing scripts
            compilerOptions.ReferencedAssemblies.Add(scriptApis.First().Location);
            compilerOptions.ReferencedAssemblies.Add(typeof(ScriptDomain).Assembly.Location);

            string extension = Path.GetExtension(filename);

            System.CodeDom.Compiler.CodeDomProvider compiler = null;

            if (extension.Equals(".cs", StringComparison.OrdinalIgnoreCase))
            {
                compiler = new Microsoft.CSharp.CSharpCodeProvider();
                compilerOptions.CompilerOptions += " /unsafe";
            }
            else if (extension.Equals(".vb", StringComparison.OrdinalIgnoreCase))
            {
                compiler = new Microsoft.VisualBasic.VBCodeProvider();
            }
            else
            {
                return(false);
            }

            System.CodeDom.Compiler.CompilerResults compilerResult = compiler.CompileAssemblyFromFile(compilerOptions, filename);

            if (!compilerResult.Errors.HasErrors)
            {
                Log.Message(Log.Level.Debug, "Successfully compiled ", Path.GetFileName(filename), ".");
                return(LoadScriptsFromAssembly(compilerResult.CompiledAssembly, filename));
            }
            else
            {
                var errors = new System.Text.StringBuilder();

                foreach (System.CodeDom.Compiler.CompilerError error in compilerResult.Errors)
                {
                    errors.Append("   at line ");
                    errors.Append(error.Line);
                    errors.Append(": ");
                    errors.Append(error.ErrorText);
                    errors.AppendLine();
                }

                Log.Message(Log.Level.Error, "Failed to compile ", Path.GetFileName(filename), " with ", compilerResult.Errors.Count.ToString(), " error(s):", Environment.NewLine, errors.ToString());
                return(false);
            }
        }
示例#29
0
        //Compiler du code VB.net
        public static bool BuildVB(string Code, string OutputPath, string References = "none")
        {
            Debug.Logs.Write("[Plugin.Builder] Compilling with Visual Basic compilator.", Debug.LogType.Info);

            Microsoft.VisualBasic.VBCodeProvider Provider = new Microsoft.VisualBasic.VBCodeProvider();

            return(BuildCode(Code, OutputPath, Provider, References));
        }
示例#30
0
        static void CompileScripts( Dictionary<string, Script> scripts, Dictionary<string, CommandDelegate> commands, ClassicBot main )
        {
            foreach( var keypair in scripts ) {
                Script script = keypair.Value;
                if( String.IsNullOrEmpty( script.Code ) ) continue;
                CodeDomProvider compiler;
                if( script.IsCSharp ) {
                    compiler = new Microsoft.CSharp.CSharpCodeProvider( new Dictionary<string, string>{ { "CompilerVersion", "v2.0" } } );
                } else {
                    compiler = new Microsoft.VisualBasic.VBCodeProvider( new Dictionary<string, string>{ { "CompilerVersion", "v2.0" } } );
                }

                CompilerParameters cParams = new CompilerParameters {
                    GenerateExecutable = false,
                    GenerateInMemory = true,
                    //CompilerOptions = "/unsafe", Causes errors with the Visual Basic Compiler.
                    TreatWarningsAsErrors = false,
                    WarningLevel = 4,
                };
                if( script.KnownReferences == null || script.KnownReferences.Length == 0 ) { // Add defalt references.
                    cParams.ReferencedAssemblies.Add( "System.dll" );
                    cParams.ReferencedAssemblies.Add( "LibClassicBot.dll" );
                } else {
                    cParams.ReferencedAssemblies.AddRange( script.KnownReferences );
                }

                CompilerResults results = compiler.CompileAssemblyFromSource( cParams, script.Code );
                if( results.Errors.Count != 0 )  {
                    try {
                        foreach( CompilerError error in results.Errors ) {
                            string errorMsg = String.Format( "{0} Line: {1} {2}", error.ErrorNumber, error.Line, error.ErrorText );
                            if( error.IsWarning ) {
                                main.Log( LogType.Error, "Warning while compiling script " + keypair.Key, errorMsg );
                            } else {
                                main.Log( LogType.Error, "Error while compiling script " + keypair.Key, errorMsg );
                            }
                        }
                    } catch( Exception e ) {
                        main.Log( LogType.Error, "Error while trying to display errors. " , e.ToString() );
                    }
                    continue;
                }
                compiler.Dispose();

                Type[] types = results.CompiledAssembly.GetTypes();
                for( int i = 0; i < types.Length; i++ ) {
                    Type type = types[i];
                    if( type.IsSubclassOf( typeof( Plugin ) ) ) {
                        Plugin plugin = (Plugin)Activator.CreateInstance( type );
                        plugin.Initialize( main );
                        if( !commands.ContainsKey( plugin.CommandName ) ) {
                            main.Log( LogType.BotActivity, "Loaded command " + plugin.CommandName );
                            commands.Add( plugin.CommandName, plugin.Command );
                        }
                    }
                }
            }
        }
        public void MakeModule()
        {
            try
            {
                CompilerParameters cp = new CompilerParameters();
                cp.GenerateExecutable      = false;
                cp.IncludeDebugInformation = false;

                foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
                {
                    cp.ReferencedAssemblies.Add(asm.Location);
                }

                string code = codestart + Regex.Replace(txtCode.Text, "VbCrLf", "\"/r/n\"", RegexOptions.IgnoreCase) + "\r\n" + codeend;

                CompilerResults results;
                if (cmboLang.SelectedIndex == 0)
                {
                    Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                    results = codeProvider.CompileAssemblyFromSource(cp, code);
                }
                else
                {
                    Microsoft.VisualBasic.VBCodeProvider codeProvider = new Microsoft.VisualBasic.VBCodeProvider();
                    results = codeProvider.CompileAssemblyFromSource(cp, code);
                }
                if (results.Errors.Count > 0)
                {
                    StringBuilder builder = new StringBuilder("Compilation failed:");
                    foreach (CompilerError err in results.Errors)
                    {
                        builder.AppendLine(String.Format("Error: {0}\r\nLine: {1}\r\nNumber: {2}\r\n", err.ErrorText, err.Line, err.ErrorNumber));
                    }

                    MessageBox.Show(this, builder.ToString(), "Compilation errors");

                    Module = null;
                    return;
                }

                Type[] types = results.CompiledAssembly.GetTypes();

                foreach (Type t in types)
                {
                    Type g = t.GetInterface("IModule");

                    if (g != null)
                    {
                        Module = (IModule)Activator.CreateInstance(t);
                    }
                }
            }
            catch (Exception ex)
            {
                Module = null;
                ErrorHandler.Handle(ex);
            }
        }
示例#32
0
        public string GenEntitiesEx(Assembly ass, int outLang)
        {
            CodeCompileUnit unit = new CodeCompileUnit();
            CodeNamespace   ns;
            //ns = new CodeNamespace(GetOutputNamespace(type));
            //unit.Namespaces.Add(ns);
            int i = 0;

            foreach (Type type in ass.GetTypes())
            {
                if (typeof(IEntity).IsAssignableFrom(type) && typeof(IEntity) != type && advOpt.IsEntityEnabled(type.Name))
                {
                    ns = new CodeNamespace(outNs);
                    unit.Namespaces.Add(ns);
                    ns.Imports.Add(new CodeNamespaceImport("System"));
                    //ns.Imports.Add(new CodeNamespaceImport("MySoft.Data"));
                    //ns.Imports.Add(new CodeNamespaceImport("MySoft.Data.Design"));
                    //sb.Append("namespace " + GetOutputNamespace(type) + "\r\n{\r\n");
                    GenEntityEx(ns, type, outLang);
                    //sb.Append("}\r\n\r\n");

                    ++i;
                }
            }

            CodeDomProvider provider = null;

            switch (outLang)
            {
            case 0: provider = new Microsoft.CSharp.CSharpCodeProvider();
                break;

            case 1: provider = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            //case 2: provider = new Microsoft.VisualC.CppCodeProvider();
            //    break;
            //case 3: provider = new Microsoft.VisualC.CppCodeProvider7();
            //    break;
            //case 4: provider = new Microsoft.JScript.JScriptCodeProvider();
            //    break;
            default: provider = new Microsoft.CSharp.CSharpCodeProvider();
                break;
            }

            StringBuilder      codeBuilder    = new StringBuilder();
            StringWriter       stringWriter   = new StringWriter(codeBuilder);
            IndentedTextWriter indentedWriter = new IndentedTextWriter(stringWriter, "  ");

            indentedWriter.Indent = 2;
            CodeGeneratorOptions options = new CodeGeneratorOptions();

            options.BlankLinesBetweenMembers = true;
            options.IndentString             = "\t";
            provider.GenerateCodeFromCompileUnit(unit, indentedWriter, options);
            return(codeBuilder.ToString());
        }
示例#33
0
        public static object CompileCode(string _input)
        {
            Microsoft.VisualBasic.VBCodeProvider codecompiler = new Microsoft.VisualBasic.VBCodeProvider();
            CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

            CodeNamespace dom_namespace = pGetNameSpace();
            CodeTypeDeclaration dom_class = pGetClass();

            return null;
        }
示例#34
0
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
            case CodeDomGenerator.Language.CSharp:
                using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("new ");
                        provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference.ArrayElementType), tw, opts);
                        tw.Write("[");
                        for (int i = 0; i < Dimensions.Count; i++)
                        {
                            if (i > 0)
                            {
                                tw.Write(",");
                            }
                            provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                        }
                        tw.Write("]");
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            case CodeDomGenerator.Language.VB:
                using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                {
                    System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                    using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                    {
                        tw.Write("(");
                        for (int i = 0; i < Dimensions.Count; i++)
                        {
                            if (i > 0)
                            {
                                tw.Write(",");
                            }
                            tw.Write("(");
                            provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                            tw.Write(")-1");
                        }
                        tw.Write(") as ");
                        provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
                        Value = tw.InnerWriter.ToString();
                    }
                }
                break;

            default:
                throw new NotImplementedException(language.ToString());
            }
        }
示例#35
0
文件: Program.cs 项目: wasowski/NMF
        private void OutputGeneratedCode(CodeCompileUnit compileUnit)
        {
            CodeDomProvider generator = null;

            switch (options.Language)
            {
            case SupportedLanguage.CS:
                generator = new Microsoft.CSharp.CSharpCodeProvider();
                break;

            case SupportedLanguage.VB:
                generator = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case SupportedLanguage.PY:
                generator = new PythonProvider();
                break;

            default:
                Console.WriteLine("Unknown language detected. Falling back to default C#");
                generator = new Microsoft.CSharp.CSharpCodeProvider();
                break;
            }

            var genOptions = new CodeGeneratorOptions()
            {
                BlankLinesBetweenMembers = true,
                VerbatimOrder            = false,
                ElseOnClosing            = false,
                BracingStyle             = "C",
                IndentString             = "    "
            };

            if (options.UseFolders)
            {
                foreach (var file in MetaFacade.SplitCompileUnit(compileUnit))
                {
                    var fileInfo = new FileInfo(Path.Combine(options.OutputFile, file.Key) + "." + generator.FileExtension);
                    CheckDirectoryExists(fileInfo.Directory);
                    using (var sw = new StreamWriter(fileInfo.Create()))
                    {
                        generator.GenerateCodeFromCompileUnit(file.Value, sw, genOptions);
                    }
                }
            }
            else
            {
                using (var sw = new StreamWriter(options.OutputFile))
                {
                    generator.GenerateCodeFromCompileUnit(compileUnit, sw, genOptions);
                }
            }
        }
示例#36
0
        /// <include file='doc\DesignerService.uex' path='docs/doc[@for="DesignerService.IVSMDCodeDomCreator.CreateCodeDomProvider"]/*' />
        /// <devdoc>
        ///     Creates a code dom provider around the given hierarchy and itemid.
        /// </devdoc>
        IVSMDCodeDomProvider IVSMDCodeDomCreator.CreateCodeDomProvider(object pHier, int itemid)
        {
            // Extract the project item
            //
            ProjectItem projectItem = null;

            if (itemid != __VSITEMID.VSITEMID_NIL && pHier != null)
            {
                object o;
                ((IVsHierarchy)pHier).GetProperty(itemid, __VSHPROPID.VSHPROPID_ExtObject, out o);
                projectItem = (ProjectItem)o;

                if (projectItem == null)
                {
                    throw new Exception(SR.GetString(SR.DESIGNERLOADERNoFileCodeModel));
                }
            }

            // Extract the type GUID of the hierarchy.
            //
            Guid typeCSharp = new Guid("{FAE04EC0-301F-11d3-BF4B-00C04F79EFBC}");
            Guid typeVB     = new Guid("{F184B08F-C81C-45f6-A57F-5ABD9991F28F}");
            Guid typeGuid;

            if (NativeMethods.Failed(((IVsHierarchy)pHier).GetGuidProperty(__VSITEMID.VSITEMID_ROOT, __VSHPROPID.VSHPROPID_TypeGuid, out typeGuid)))
            {
                throw new NotSupportedException();
            }

            CodeDomProvider provider = null;

            if (typeGuid.Equals(typeCSharp))
            {
                provider = new Microsoft.CSharp.CSharpCodeProvider();
            }
            else if (typeGuid.Equals(typeVB))
            {
                provider = new Microsoft.VisualBasic.VBCodeProvider();
            }
            else
            {
                provider = CreateProviderFromRegistry(typeGuid);
            }

            if (provider == null)
            {
                // Unsupported language
                //
                throw new NotSupportedException(SR.GetString(SR.DESIGNERLOADERNoLanguageSupport));
            }

            return(new VSMDCodeDomProvider(new VsCodeDomProvider(this, projectItem, provider)));
        }
示例#37
0
        public CompilerResults ExeCuteCode(string Source, Client client)
        {
            CompilerResults Results = null;


            try
            {
                if (CompiledScripts.ContainsKey(Source))
                {
                    /*   Thread t = new Thread(() => RunScript(CompiledScripts[Source]));
                     * t.Start();*/
                    RunScript(CompiledScripts[Source]);
                }
                else
                {
                    CodeDomProvider P = default(CodeDomProvider);
                    P = new Microsoft.VisualBasic.VBCodeProvider();
                    CompilerParameters CP = new CompilerParameters();

                    CP.GenerateExecutable      = false;
                    CP.GenerateInMemory        = true;
                    CP.IncludeDebugInformation = false;
                    //CP.CompilerOptions = "/optimize"
                    CP.TreatWarningsAsErrors = false;

                    CP.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
                    CP.ReferencedAssemblies.Add("System.Windows.Forms.dll");
                    CP.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
                    CP.ReferencedAssemblies.Add("System.Xml.dll");
                    CP.ReferencedAssemblies.Add("System.Drawing.dll");
                    CP.ReferencedAssemblies.Add("System.dll");

                    //  CP.ReferencedAssemblies.Add(System.Application.StartupPath + "\\\\TibiaAPI.dll");
                    Results = P.CompileAssemblyFromSource(CP, Source);

                    IScript script = (IScript)FindInterface(Results.CompiledAssembly, "IScript");
                    CompiledScripts.Add(Source, script);

                    /*   Thread t = new Thread(() => RunScript(script));
                     * t.Start();
                     */
                    RunScript(script);

                    // RunScript(script)
                }
                return(null);
            }
            catch (Exception ex)
            {
                return(Results);
            }
        }
        /// <summary>
        /// Generates an Assembly from a script filename
        /// </summary>
        /// <param name="filename">The filename of the script</param>
        /// <param name="references">Assembly references for the script</param>
        /// <returns>The generated assembly</returns>
        public Assembly CreateAssembly(string filename, IList references)
        {
            // ensure that compilerErrors is null
            compilerErrors = null;

            string extension = Path.GetExtension(filename);

            // Select the correct CodeDomProvider based on script file extension
            CodeDomProvider codeProvider;
            switch (extension)
            {
                case ".cs":
                    codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;
                case ".vb":
                    codeProvider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;
                case ".js":
                    codeProvider = new Microsoft.JScript.JScriptCodeProvider();
                    break;
                default:
                    throw new InvalidOperationException("Script files must have a .cs, .vb, or .js extension, for C#, Visual Basic.NET, or JScript respectively.");
            }

            //ICodeCompiler compiler = codeProvider.CreateCompiler();

            // Set compiler parameters
            var compilerParams = new CompilerParameters { CompilerOptions = "/target:library /optimize", GenerateExecutable = false, GenerateInMemory = true, IncludeDebugInformation = false };

            compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
            compilerParams.ReferencedAssemblies.Add("System.dll");

            // Add custom references
            foreach (string reference in references.Cast<string>().Where(reference => !compilerParams.ReferencedAssemblies.Contains(reference)))
            {
                compilerParams.ReferencedAssemblies.Add(reference);
            }

            // Do the compilation
            CompilerResults results = codeProvider.CompileAssemblyFromFile(compilerParams, filename);

            //Do we have any compiler errors
            if (results.Errors.Count > 0)
            {
                compilerErrors = results.Errors;
                throw new Exception(
                    "Compiler error(s) encountered and saved to AssemblyFactory.CompilerErrors");
            }

            Assembly createdAssembly = results.CompiledAssembly;
            return createdAssembly;
        }
示例#39
0
        public static string ConvertCodeDomToPInvokeCodeImpl(LanguageType type, CodeTypeDeclarationCollection col, ErrorProvider ep)
        {
            ThrowIfNull(col);
            ThrowIfNull(ep);

            StringWriter    writer       = new StringWriter();
            CodeDomProvider provider     = default(CodeDomProvider);
            string          commentStart = null;

            // Generate based on the language
            switch (type)
            {
            case Transform.LanguageType.VisualBasic:
                commentStart = "'";
                provider     = new Microsoft.VisualBasic.VBCodeProvider();
                break;

            case Transform.LanguageType.CSharp:
                commentStart = "//";
                provider     = new Microsoft.CSharp.CSharpCodeProvider();
                break;

            default:
                ThrowInvalidEnumValue(type);
                return(string.Empty);
            }

            foreach (string warning in ep.Warnings)
            {
                writer.WriteLine("{0} Warning: {1}", commentStart, warning);
            }

            foreach (string err in ep.Errors)
            {
                writer.WriteLine("{0} Error: {1}", commentStart, err);
            }

            foreach (CodeTypeDeclaration ctd in col)
            {
                provider.GenerateCodeFromMember(ctd, writer, new CodeGeneratorOptions());
            }

            if (type == Transform.LanguageType.CSharp)
            {
                // CSharp specific fixup
                return(FixupCSharpCode(writer.ToString()));
            }
            else
            {
                return(writer.ToString());
            }
        }
示例#40
0
 private void GenerateVB()
 {
     using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
     {
         CodeGeneratorOptions opts = new CodeGeneratorOptions();
         StringBuilder        sb   = new StringBuilder();
         using (IndentedTextWriter tw = new IndentedTextWriter(new StringWriter(sb), opts.IndentString))
         {
             provider.GenerateCodeFromMember(Field, tw, opts);
             sb.Replace(" " + Field.Name, " ReadOnly " + Field.Name);
         }
         Text = sb.ToString();
     }
 }
示例#41
0
 private void GenerateVB()
 {
     using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
     {
         CodeGeneratorOptions opts = new CodeGeneratorOptions();
         StringBuilder sb = new StringBuilder();
         using (IndentedTextWriter tw = new IndentedTextWriter(new StringWriter(sb), opts.IndentString))
         {
             provider.GenerateCodeFromMember(Field, tw, opts);
             sb.Replace(" " + Field.Name, " ReadOnly " + Field.Name);
         }
         Text = sb.ToString();
     }
 }
示例#42
0
        /// <summary>
        /// Compiles the Visual Basic code in assembly.
        /// </summary>
        protected void CompileVB(string code, out Microsoft.VisualBasic.VBCodeProvider provider)
        {
            System.CodeDom.Compiler.CompilerParameters parameters = new System.CodeDom.Compiler.CompilerParameters();
            parameters.GenerateInMemory      = true; //  'Assembly is created in memory
            parameters.TreatWarningsAsErrors = false;
            parameters.WarningLevel          = 4;

            string[] refs = { "System.dll", System.Reflection.Assembly.GetExecutingAssembly().Location };

            parameters.ReferencedAssemblies.AddRange(refs);
            provider = new Microsoft.VisualBasic.VBCodeProvider();

            string tomoSource = @"
Imports System
Imports Fractrace.TomoGeometry


Public Class VBTomoFormula 
Inherits TomoFormula

" + code + @"

End Class
";

            try
            {
                results = provider.CompileAssemblyFromSource(parameters, tomoSource);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                FormulaEditor.AddError(ex.ToString(), 0, 0);
                return;
            }

            if (results.Errors.Count != 0)
            {
                foreach (System.CodeDom.Compiler.CompilerError cerror in results.Errors)
                {
                    if (!cerror.IsWarning)
                    {
                        provider = null;
                        Console.WriteLine(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"");
                        FormulaEditor.AddError(cerror.ErrorText + "Line " + cerror.Line + " " + cerror.Column + " in \"" + tomoSource + "\"", cerror.Line, cerror.Column);
                        return;
                    }
                }
            }
        }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("new ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference.ArrayElementType), tw, opts);
                     tw.Write("[");
                     for (int i = 0; i < Dimensions.Count; i++)
                     {
                         if (i > 0)
                             tw.Write(",");
                         provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                     }
                     tw.Write("]");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("(");
                     for (int i = 0; i < Dimensions.Count; i++)
                     {
                         if (i > 0)
                             tw.Write(",");
                         tw.Write("(");
                         provider.GenerateCodeFromExpression(Dimensions[i], tw, opts);
                         tw.Write(")-1");
                     }
                     tw.Write(") as ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
        internal string GenerateSource(string language)
        {
            CodeDomProvider codeProvider=null;
            if (language == "cs")
                codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
            else if (language == "vb")
                codeProvider = new Microsoft.VisualBasic.VBCodeProvider();
            else
            {

                    throw new Exception("make sure you are trying to load a CodeDomProvider assembly");

            }
            return GenerateSource(codeProvider);
        }
示例#45
0
        public static CompilerResults CompileScript(string Source, string Reference, Languages Language)
        {
            CodeDomProvider provider = null;

            switch (Language)
            {
                case Languages.VB:
                    provider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;
                case Languages.CSharp:
                    provider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;
            }

            return CompileScript(Source, Reference, provider);
        }
示例#46
0
        /// <summary>
        /// Compile a set of source files written in a specified language 
        /// </summary>
        /// <param name="files">Array of source files</param>
        /// <param name="referencedAssemblies">Array of refered assemblies</param>
        /// <param name="outputFilePath">Output assembly file path</param>
        /// <param name="language">Language of source files</param>
        /// <returns>Compiler results</returns>
        public static CompilerResults Compile(List<string> files, List<string> referencedAssemblies, List<string> embeddedResourcesFiles, string outputFilePath, Languages language)
        {
            CodeDomProvider provider = null;

            switch (language)
            {
                case Languages.VB:
                    provider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;
                case Languages.CSharp:
                    provider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;
            }

            return Compile(files, referencedAssemblies, embeddedResourcesFiles, outputFilePath, provider);
        }
示例#47
0
        public static CompilerResults CompilacionDinamica(string Codigo, bool CodigoesRuta, bool CompilarEnMemoria, string ArchivoResultado, bool CompilarCS)
        {
            //Creamos una instancia de la clase VBCodeProvider o CSharpCodeProvider
            //que usaremos para obtener una referencia a una interfaz ICodeCompiler
            System.CodeDom.Compiler.CodeDomProvider proveedor;
            if (CompilarCS == true)
            {
                proveedor = new CSharpCodeProvider();
            }
            else
            {
                proveedor = new Microsoft.VisualBasic.VBCodeProvider();
            }

            //Usamos la clase CompilerParameters para pasar parámetros al compilador
            //En particular, definimos que el assembly sea compilado en memoria.
            CompilerParameters ParametrosCompilacion = new CompilerParameters();
            if (CompilarEnMemoria == true)
            {
                ParametrosCompilacion.GenerateInMemory = true;
                ParametrosCompilacion.GenerateExecutable = false;
            }
            else
            {
                ParametrosCompilacion.GenerateExecutable = true;
                ParametrosCompilacion.GenerateInMemory = false;
                ParametrosCompilacion.OutputAssembly = ArchivoResultado;
            }
            ParametrosCompilacion.CompilerOptions = "/target:library";
            ParametrosCompilacion.ReferencedAssemblies.Add("System.dll");
            ParametrosCompilacion.ReferencedAssemblies.Add("System.Drawing.dll");
            ParametrosCompilacion.ReferencedAssemblies.Add("System.Windows.Forms.dll");

            //Creamos un objeto CompilerResult que obtendrá los resultados de la compilación
            CompilerResults ResultadosCompilacion;
            if (CodigoesRuta == true)
            {
                ResultadosCompilacion = proveedor.CompileAssemblyFromFile(ParametrosCompilacion, Codigo);
            }
            else
            {
                ResultadosCompilacion = proveedor.CompileAssemblyFromSource(ParametrosCompilacion, Codigo);
            }
            return ResultadosCompilacion;
        }
示例#48
0
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     provider.GenerateCodeFromExpression(Parameter, tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 StringBuilder sb = new StringBuilder();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(sb), opts.IndentString))
                 {
                     provider.GenerateCodeFromExpression(Parameter, tw, opts);
                     switch (Option)
                     {
                         case ParamOption.Optional:
                             sb.Replace("ByVal " + Parameter.Name, "Optional ByVal " + Parameter.Name);
                             break;
                         case ParamOption.ParamArray:
                             sb.Replace("ByVal " + Parameter.Name, "ByVal ParamArray " + Parameter.Name);
                             break;
                         default:
                             throw new NotSupportedException(Option.ToString());
                     }
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
示例#49
0
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("(");
                     provider.GenerateCodeFromExpression(Expression, tw, opts);
                     tw.Write(" is ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
                     tw.Write(")");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     tw.Write("( TypeOf ");
                     provider.GenerateCodeFromExpression(Expression, tw, opts);
                     tw.Write(" Is ");
                     provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(TypeReference), tw, opts);
                     tw.Write(")");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }
        private bool IsLanguageSupported(string language)
        {
            _language = language;
            _isLangCSharp = string.Compare(language, CSHARP, StringComparison.OrdinalIgnoreCase) == 0;

            if (IsLanguageCSharp)
            {
                _codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                return true;
            }
            else
            {
                _isLangVB = string.Compare(language, VB, StringComparison.OrdinalIgnoreCase) == 0;
                if (IsLanguageVB)
                {
                    _codeProvider = new Microsoft.VisualBasic.VBCodeProvider();
                    return true;
                }
            }

            if (CodeDomProvider.IsDefinedLanguage(language))
            {
                CompilerInfo = CodeDomProvider.GetCompilerInfo(language);
                return (CompilerInfo != null);
            }

            return false;
        }
示例#51
0
        private void GenerateVB()
        {
            using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
            {
                CodeGeneratorOptions opts = new CodeGeneratorOptions();
                StringWriter sw = new StringWriter();
                provider.GenerateCodeFromMember(_property, sw, opts);
                StringReader sr = new StringReader(sw.GetStringBuilder().ToString());
                string line = sr.ReadLine();
                while (string.IsNullOrEmpty(line))
                    line = sr.ReadLine();

                int idx = line.IndexOf(" " + _property.Name + "(");
                int asIdx = line.LastIndexOf(" As ");
                StringBuilder sb = new StringBuilder();
                sb.Append((IsDefault?"Default ":string.Empty) + line.Substring(0, idx+_property.Name.Length+2));
                foreach (CodeParameterDeclarationExpression parameter in Parameters)
                {
                    provider.GenerateCodeFromExpression(parameter, new StringWriter(sb), opts);
                    sb.Append(", ");
                }
                sb.Length -= 2;
                sb.Append(")").Append(line.Substring(asIdx));
                Text = sw.GetStringBuilder().Replace(line, sb.ToString()).ToString();
            }
        }
示例#52
0
文件: MonoWSDL2.cs 项目: nobled/mono
		///
		/// <summary>
		///	Fetch the Code Provider for the language specified by the 'language' members.
		/// </summary>
		///
		private CodeDomProvider GetProvider()
		{
			CodeDomProvider provider;
			Type type;
			
			switch (language.ToUpper ()) {
			case "CS":
				provider = new CSharpCodeProvider ();
				break;
			case "VB":
				provider = new Microsoft.VisualBasic.VBCodeProvider ();
				break;
			case "BOO":
				type = Type.GetType("Boo.Lang.CodeDom.BooCodeProvider, Boo.Lang.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67");
				if (type != null){
					return (CodeDomProvider) Activator.CreateInstance (type);
				}
				throw new Exception ("Boo.Lang.CodeDom.BooCodeProvider not available");
				
			default:
				type = Type.GetType(language);
				if (type != null) {
					return (CodeDomProvider) Activator.CreateInstance (type);
				}	
				throw new Exception ("Unknown language");
			}
			return provider;
		}
示例#53
0
            /// <summary>
            /// Initializes a new instance of the <see cref="CodeProvider" />
            /// for the specified <see cref="CodeLanguage" />.
            /// </summary>
            /// <param name="assemblyInfoTask">The <see cref="AssemblyInfoTask" /> for which an instance of the <see cref="CodeProvider" /> class should be initialized.</param>
            /// <param name="codeLanguage">The <see cref="CodeLanguage" /> for which an instance of the <see cref="CodeProvider" /> class should be initialized.</param>
            public CodeProvider(AssemblyInfoTask assemblyInfoTask, CodeLanguage codeLanguage) {
                CodeDomProvider provider = null;

                switch (codeLanguage) {
                    case CodeLanguage.CSharp:
                        provider = new Microsoft.CSharp.CSharpCodeProvider();
                        break;
                    case CodeLanguage.JScript:
                        throw new NotSupportedException(ResourceUtils.GetString("NA2008"));
                    case CodeLanguage.VB:
                        provider = new Microsoft.VisualBasic.VBCodeProvider();
                        break;
                    default:
                        throw new NotSupportedException(ResourceUtils.GetString("NA2007"));
                }

                _generator = provider.CreateGenerator();
                _language = codeLanguage;
            }
            /// <summary>
        /// Generates a strongly typed assembly from the resources
        /// 
        /// UNDER CONSTRUCTION. 
        /// Doesn't work correctly for Web forms due to hard coded resource managers.
        /// </summary>
        /// <param name="ResourceSetName"></param>
        /// <param name="Namespace"></param>
        /// <param name="Classname"></param>
        /// <param name="FileName"></param>
        /// <returns></returns>
        public bool CreateStronglyTypedResource(string ResourceSetName,string Namespace, string Classname, string FileName)
        {
            try
            {
                //wwDbResourceDataManager Data = new wwDbResourceDataManager();
                //IDictionary ResourceSet = Data.GetResourceSet("", ResourceSetName);

                // Use the custom ResourceManage to retrieve a ResourceSet
                DbResourceManager Man = new DbResourceManager(ResourceSetName);
                ResourceSet rs = Man.GetResourceSet(CultureInfo.InvariantCulture, false, false);
                IDictionaryEnumerator Enumerator = rs.GetEnumerator();

                // We have to turn into a concret Dictionary
                Dictionary<string, object> Resources = new Dictionary<string, object>();
                while (Enumerator.MoveNext())
                {
                    DictionaryEntry Item = (DictionaryEntry) Enumerator.Current;
                    Resources.Add(Item.Key as string, Item.Value);
                }
                
                string[] UnmatchedElements;
                CodeDomProvider CodeProvider = null;

                string FileExtension = Path.GetExtension(FileName).TrimStart('.').ToLower();
                if (FileExtension == "cs")
                    CodeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                else if(FileExtension == "vb")
                    CodeProvider = new Microsoft.VisualBasic.VBCodeProvider();

                CodeCompileUnit Code = StronglyTypedResourceBuilder.Create(Resources,
                                                   ResourceSetName, Namespace, CodeProvider, false, out UnmatchedElements);

                StreamWriter writer = new StreamWriter(FileName);
                CodeProvider.GenerateCodeFromCompileUnit(Code, writer, new CodeGeneratorOptions());
                writer.Close();
            }
            catch (Exception ex)
            {
                this.ErrorMessage = ex.Message;
                return false;
            }

            return true;
        }
        public string CompileVB()
        {
        	OnChangeCompilerState(this, CompilerState.CompilationStarting, CompilerOptions.SourceFileName);
        	OnChangeCompilerState(this,CompilerState.BeginCompileFile,CompilerOptions.SourceFileName);
        	Reset();
        	Microsoft.VisualBasic.VBCodeProvider vbcp = new Microsoft.VisualBasic.VBCodeProvider();
        	List<string> sources = new List<string>();
        	sources.Add(CompilerOptions.SourceFileName);
			System.CodeDom.Compiler.CompilerParameters comp_opt = new System.CodeDom.Compiler.CompilerParameters();
			comp_opt.OutputAssembly = CompilerOptions.OutputFileName;
			comp_opt.WarningLevel = 3;
			comp_opt.ReferencedAssemblies.Add("System.Windows.Forms.dll");
			comp_opt.ReferencedAssemblies.Add("System.Drawing.dll");
			comp_opt.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
			comp_opt.IncludeDebugInformation = CompilerOptions.Debug;
			comp_opt.GenerateExecutable = true;
			string fname = Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),"_temp$"+Path.GetFileName(CompilerOptions.SourceFileName));
			File.Copy(CompilerOptions.SourceFileName,fname,true);
			string source = GetSourceFileText(CompilerOptions.SourceFileName);
			
			IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(ICSharpCode.NRefactory.SupportedLanguage.VBNet,new StringReader(source));
			parser.Parse();
			ProgInfo info = get_programm_info(parser.CompilationUnit, source);
			parser.Dispose();
			if (info != null)
			sources.AddRange(info.addit_project_files);
			string redirect_base_fname = FindSourceFileInDirectories("__RedirectIOMode.vb",Path.Combine(this.CompilerOptions.SystemDirectory,"Lib"),Path.Combine(this.CompilerOptions.SystemDirectory,"LibSource"));
			string system_unit_name = FindSourceFileInDirectories("VBSystem.vb",Path.Combine(this.CompilerOptions.SystemDirectory,"lib"),Path.Combine(this.CompilerOptions.SystemDirectory,"LibSource"));
			string redirect_fname = Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),"_RedirectIOMode.vb");
			StreamReader sr = File.OpenText(redirect_base_fname);
			string redirect_module = sr.ReadToEnd();
			sr.Close();
			if (info != null)
			{
				System.Text.StringBuilder tmp_sb = new System.Text.StringBuilder();
				if (info.modules.Count > 0)
				{
					tmp_sb.AppendLine("GetType(Fictive.Fictive).Assembly.GetType(\"PABCSystem_implementation$.PABCSystem_implementation$\").GetMethod(\"$Initialization\").Invoke(Nothing,Nothing)");
				}
				for (int i=0; i<info.modules.Count; i++)
				{
					tmp_sb.AppendLine("GetType(Fictive.Fictive).Assembly.GetType(\""+info.modules[i]+"_implementation$."+info.modules[i]+
					              "_implementation$\").GetMethod(\"$Initialization\").Invoke(Nothing,Nothing)");
					
				}
				tmp_sb.AppendLine(info.entry_module+"."+"___Main()");
				for (int i=0; i<info.modules.Count; i++)
				{
					tmp_sb.AppendLine("GetType(Fictive.Fictive).Assembly.GetType(\""+info.modules[i]+"_implementation$."+info.modules[i]+
					              "_implementation$\").GetMethod(\"$Finalization\").Invoke(Nothing,Nothing)");
					
				}
				redirect_module = redirect_module.Replace("%MAIN%",tmp_sb.ToString());
			}
			StreamWriter sw = new StreamWriter(redirect_fname, false);
			if (info != null)
			{
				sw.WriteLine(redirect_module);
			}
			else
			{
				sw.WriteLine("Module _RedirectIOMode");
				sw.WriteLine("End Module");
			}
			sw.Close();
			
			sw = new StreamWriter(CompilerOptions.SourceFileName,false);
			if (info != null && info.entry_method_name_pos != -1)
			{
				System.Text.StringBuilder sb = new System.Text.StringBuilder();
				int start_pos = 0;
				if (info.using_pos != -1)
				{
					start_pos = info.using_pos;
					sb.Append(source.Substring(0,info.using_pos));
					for (int i=0; i<info.addit_imports.Count; i++)
					{
						sb.Append(","+info.addit_imports[i]);
					}
					sb.Append(",System.Collections.Generic");
					
					sb.Append(",Microsoft.VisualBasic.Strings");
					sb.Append(",Microsoft.VisualBasic.Constants");
					sb.Append(",Microsoft.VisualBasic.VBMath");
					sb.Append(",Microsoft.VisualBasic.Information");
					sb.Append(",Microsoft.VisualBasic.Interaction");
					sb.Append(",Microsoft.VisualBasic.FileSystem");
					sb.Append(",Microsoft.VisualBasic.Financial");
					sb.Append(",Microsoft.VisualBasic.DateAndTime");
				}
				else
				{
					start_pos = 0;
					sb.Append("Imports System");
					sb.Append(",System.Collections.Generic");
					sb.Append(",Microsoft.VisualBasic.Strings");
					sb.Append(",Microsoft.VisualBasic.Constants");
					sb.Append(",Microsoft.VisualBasic.VBMath");
					sb.Append(",Microsoft.VisualBasic.Information");
					sb.Append(",Microsoft.VisualBasic.Interaction");
					sb.Append(",Microsoft.VisualBasic.FileSystem");
					sb.Append(",Microsoft.VisualBasic.Financial");
					sb.Append(",Microsoft.VisualBasic.DateAndTime");
					sb.Append(":");
				}
				sb.Append(source.Substring(start_pos,info.entry_method_name_pos-start_pos));
				sb.Append("___");
				sb.Append(source.Substring(info.entry_method_name_pos));
				sw.Write(sb.ToString());
			}
			else
			{
				sw.Write(source);
			}
			sw.Close();
			
			if (info != null && info.modules.Count > 0)
			{
				comp_opt.ReferencedAssemblies.Add(Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),PascalABCCompiler.TreeConverter.compiler_string_consts.pabc_rtl_dll_name));
				string mod_file_name = FindSourceFileInDirectories("PABCRtl.dll",Path.Combine(this.CompilerOptions.SystemDirectory,"Lib"));
				File.Copy(mod_file_name,Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),"PABCRtl.dll"),true);
				/*foreach (string mod in info.modules)
				{
					comp_opt.ReferencedAssemblies.Add(Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),mod+".dll"));
					string mod_file_name = FindSourceFileInDirectories(mod+".mod",Path.Combine(this.CompilerOptions.SystemDirectory,"lib"));
					File.Copy(mod_file_name,Path.Combine(Path.GetDirectoryName(CompilerOptions.SourceFileName),mod+".dll"),true);
				}*/
			}
			sources.Add(redirect_fname);
			sources.Add(system_unit_name);
			System.CodeDom.Compiler.CompilerResults res = vbcp.CompileAssemblyFromFile(comp_opt,sources.ToArray());
			if (res.Errors.Count > 0)
            {
            	for (int i=0; i<res.Errors.Count; i++)
            	{
            		if (!res.Errors[i].IsWarning && errorsList.Count == 0 /*&& res.Errors[i].FileName != redirect_fname*/)
            		{
            			if (File.Exists(res.Errors[i].FileName))
            				errorsList.Add(new Errors.CommonCompilerError(res.Errors[i].ErrorText, res.Errors[i].FileName,res.Errors[i].Line!=0?res.Errors[i].Line:1,1));
            			else
            				errorsList.Add(new Errors.CommonCompilerError(res.Errors[i].ErrorText, CompilerOptions.SourceFileName,res.Errors[i].Line!=0?res.Errors[i].Line:1,1));
            		}
            		else if (res.Errors[i].IsWarning)
            		{
            			warnings.Add(new Errors.CommonWarning(res.Errors[i].ErrorText, res.Errors[i].FileName, res.Errors[i].Line,1));
            		}
            	}
            }
			linesCompiled = get_compiled_lines(CompilerOptions.SourceFileName);
			if (info != null)
			{
				beginOffset = info.entry_method_line;
				//if (info.using_pos == -1)
				//	beginOffset -= 1;
			}
			OnChangeCompilerState(this, CompilerState.CompilationFinished, CompilerOptions.SourceFileName);
			ClearAll();
			File.Copy(fname,CompilerOptions.SourceFileName,true);
			File.Delete(fname);
			File.Delete(redirect_fname);
            OnChangeCompilerState(this, CompilerState.Ready, null);
            if (errorsList.Count > 0)
            	return null;
            else
				return res.PathToAssembly;
        }
示例#56
0
        public void MakeModule()
        {
            try
            {
                CompilerParameters cp = new CompilerParameters();
                cp.GenerateExecutable = false;
                cp.IncludeDebugInformation = false;

                foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
                {
                    cp.ReferencedAssemblies.Add(asm.Location);
                }

                string code = codestart + Regex.Replace(txtCode.Text, "VbCrLf", "\"/r/n\"", RegexOptions.IgnoreCase) + "\r\n" + codeend;

                CodeDomProvider codeProvider;

                if (cmboLang.SelectedIndex == 0)
                    codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                else
                    codeProvider = new Microsoft.VisualBasic.VBCodeProvider();

                CompilerResults results = codeProvider.CompileAssemblyFromSource(cp, code);

                if (results.Errors.Count > 0)
                {
                    StringBuilder builder = new StringBuilder("Compilation failed:\r\n");
                    foreach (CompilerError err in results.Errors)
                    {
                        builder.AppendLine(String.Format("Error: {0}\r\nLine: {1}\r\nNumber: {2}\r\n", err.ErrorText, err.Line, err.ErrorNumber));
                    }

                    MessageBox.Show(this, builder.ToString(), "Compilation errors");

                    Module = null;
                    return;
                }

                foreach (Type t in results.CompiledAssembly.GetTypes())
                {
                    if (t.GetInterface("IModule") != null)
                        Module = (IModule)Activator.CreateInstance(t, Program.AWB);
                }
            }
            catch (Exception ex)
            {
                Module = null;
                ErrorHandler.Handle(ex);
            }
        }
        [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] //For Path.GetTempPath method. 
                                                                            //We use tha path to create a temp file stream which is consistent with the resource consumption of machine.

        internal void GenerateCode(LazyTextWriterCreator target, string targetLocation)
        {
            Debug.Assert(target != null, "target parameter is null");

            IndentedTextWriter indentedTextWriter = null;
            System.IO.Stream tempFileStream = null;
            System.IO.StreamReader reader = null;
            System.IO.StreamWriter writer = null;
            TempFileCollection tempFiles = null;
            try
            {
                CodeDomProvider provider = null;
                switch (Language)
                {
                    case LanguageOption.GenerateCSharpCode:
                        provider = new Microsoft.CSharp.CSharpCodeProvider();
                        break;

                    case LanguageOption.GenerateVBCode:
                        provider = new Microsoft.VisualBasic.VBCodeProvider();
                        break;
                }

                _isLanguageCaseSensitive = (provider.LanguageOptions & LanguageOptions.CaseInsensitive) == 0;

                new NamespaceEmitter(this, _codeNamespace, target.TargetFilePath).Emit();

                // if there were errors we don't need the output file
                if (RealErrorsExist)
                {
                    return;
                }

                if (FixUps.Count == 0 || !FixUpCollection.IsLanguageSupported(Language))
                {
                    indentedTextWriter = new IndentedTextWriter(target.GetOrCreateTextWriter(), "\t");
                }
                else
                {
                    // need to write to a temporary file so we can do fixups...
                    tempFiles = new TempFileCollection(Path.GetTempPath());
                    string filename = Path.Combine(tempFiles.TempDir, "EdmCodeGenFixup-" + Guid.NewGuid().ToString() + ".tmp");
                    tempFiles.AddFile(filename, false);
                    tempFileStream = new System.IO.FileStream(filename, System.IO.FileMode.CreateNew, System.IO.FileAccess.ReadWrite,
                        System.IO.FileShare.None);
                    indentedTextWriter = new IndentedTextWriter(new System.IO.StreamWriter(tempFileStream), "\t");
                }

                CodeGeneratorOptions styleOptions = new CodeGeneratorOptions();
                styleOptions.BracingStyle = "C";
                styleOptions.BlankLinesBetweenMembers = false;
                styleOptions.VerbatimOrder = true;
                provider.GenerateCodeFromCompileUnit(CompileUnit, indentedTextWriter, styleOptions);

                // if we wrote to a temp file need to post process the file...
                if (tempFileStream != null)
                {
                    indentedTextWriter.Flush();
                    tempFileStream.Seek(0, System.IO.SeekOrigin.Begin);
                    reader = new System.IO.StreamReader(tempFileStream);
                    FixUps.Do(reader, target.GetOrCreateTextWriter(), Language, SourceObjectNamespaceName != string.Empty);
                }
            }
            catch (System.UnauthorizedAccessException ex)
            {
                AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex);
            }
            catch (System.IO.FileNotFoundException ex)
            {
                AddError(ModelBuilderErrorCode.FileNotFound, EdmSchemaErrorSeverity.Error, ex);
            }
            catch (System.Security.SecurityException ex)
            {
                AddError(ModelBuilderErrorCode.SecurityError, EdmSchemaErrorSeverity.Error, ex);
            }
            catch (System.IO.DirectoryNotFoundException ex)
            {
                AddError(ModelBuilderErrorCode.DirectoryNotFound, EdmSchemaErrorSeverity.Error, ex);
            }
            catch (System.IO.IOException ex)
            {
                AddError(ModelBuilderErrorCode.IOException, EdmSchemaErrorSeverity.Error, ex);
            }
            finally
            {
                if (indentedTextWriter != null)
                {
                    indentedTextWriter.Close();
                }
                if (tempFileStream != null)
                {
                    tempFileStream.Close();
                }
                if (tempFiles != null)
                {
                    tempFiles.Delete();
                    ((IDisposable)tempFiles).Dispose();
                }
                if (reader != null)
                {
                    reader.Close();
                }
                if (writer != null)
                {
                    writer.Close();
                }
            }
        }
        public void GenerateCode(CodeDomGenerator.Language language)
        {
            switch (language)
            {
                case CodeDomGenerator.Language.CSharp:
                    using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {

                            tw.Write("foreach (");
                            provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                            tw.Write(" {0} in ", provider.CreateValidIdentifier(IterationItemName));
                            provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                            tw.WriteLine(")");
                            tw.WriteLine("{");
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.WriteLine("}");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                case CodeDomGenerator.Language.VB:
                    using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
                    {
                        System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                        using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                        {
                            tw.Write("For Each {0} As ", provider.CreateValidIdentifier(IterationItemName));
                            provider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(IterationItemType), tw, opts);
                            tw.Write(" in ");
                            provider.GenerateCodeFromExpression(IterExpression, tw, opts);
                            tw.WriteLine();
                            tw.Indent++;
                            if (Statements != null)
                                foreach (CodeStatement statement in Statements)
                                {
                                    provider.GenerateCodeFromStatement(statement, tw, opts);
                                }
                            tw.Indent--;
                            tw.WriteLine("Next");
                            Value = tw.InnerWriter.ToString();
                        }
                    }
                    break;
                default:
                    throw new NotImplementedException(language.ToString());
            }
        }
        private void GetViewsAndCodeDomProvider(StorageMappingItemCollection mappingCollection, out CodeDomProvider provider, out IList<EdmSchemaError> schemaErrors, out Dictionary<EntitySetBase, string> generatedViews)
        {
            //Create a CodeDomProvider based on options.
            provider = null;
            switch (m_languageOption)
            {
                case LanguageOption.GenerateCSharpCode:
                    provider = new Microsoft.CSharp.CSharpCodeProvider();
                    break;

                case LanguageOption.GenerateVBCode:
                    provider = new Microsoft.VisualBasic.VBCodeProvider();
                    break;
            }

            //Get the views for the Entity Sets and Association Sets in the mapping item collection
            GetEntitySetViews(mappingCollection, out schemaErrors, out generatedViews);
        }
 public void GenerateCode(CodeDomGenerator.Language language)
 {
     switch (language)
     {
         case CodeDomGenerator.Language.CSharp:
             using (Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     if (!_eq)
                     {
                         tw.Write("!");
                     }
                     tw.Write("ReferenceEquals(");
                     provider.GenerateCodeFromExpression(_left, tw, opts);
                     tw.Write(", ");
                     provider.GenerateCodeFromExpression(_right, tw, opts);
                     tw.Write(")");
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         case CodeDomGenerator.Language.VB:
             using (Microsoft.VisualBasic.VBCodeProvider provider = new Microsoft.VisualBasic.VBCodeProvider())
             {
                 System.CodeDom.Compiler.CodeGeneratorOptions opts = new System.CodeDom.Compiler.CodeGeneratorOptions();
                 using (System.CodeDom.Compiler.IndentedTextWriter tw = new System.CodeDom.Compiler.IndentedTextWriter(new StringWriter(), opts.IndentString))
                 {
                     provider.GenerateCodeFromExpression(_left, tw, opts);
                     if (_eq)
                         tw.Write(" Is ");
                     else
                         tw.Write(" IsNot ");
                     provider.GenerateCodeFromExpression(_right, tw, opts);
                     Value = tw.InnerWriter.ToString();
                 }
             }
             break;
         default:
             throw new NotImplementedException(language.ToString());
     }
 }