苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3467|回复: 0

[其他] Winfrom下实现自定义编译器

[复制链接]
发表于 2013-6-25 15:05:43 | 显示全部楼层 |阅读模式
以下是控制台应用程序。 请解答其中的问题。

    public class Class1
    {
        public static List<string> ErrorMessage = new List<string>();
        public static void Main()
        {
            string strCode = @"
                                    using System;
                                    public class Program
                                    {
                                            public  void Main()
                                            {
                                                    Console.WriteLine(""hello,man!"");
                                            }
                                    }
                                 ";
            if (Compile(strCode))
            {
                //此处输出 hello,man! 该如何实现???
            }
            Console.ReadKey();
        }
        public static bool Compile(string source)
        {
            string ClassName = "Program";
            CompilerParameters param = new CompilerParameters(new string[] { }, string.Empty, true);
            param.TreatWarningsAsErrors = false;
            param.GenerateExecutable = false;
            param.IncludeDebugInformation = true;
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerResults result = provider.CompileAssemblyFromSource(param, new string[] { source });
            string Message = "";
            ErrorMessage.Clear();
            if (!result.Errors.HasErrors)
            {
                Type t = result.CompiledAssembly.GetType(ClassName);
                if (t != null)
                {
                    object o = result.CompiledAssembly.CreateInstance(ClassName);
                    //Note:此处获取不到任何值,因为 Main方法没有返回值,所以 Message为null
                    Message = (string)t.InvokeMember("Main", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, o, null);
                }
                return true;
            }
            foreach (CompilerError error in result.Errors)
            {
                if (error.IsWarning) continue;
                ErrorMessage.Add("Error(" + error.ErrorNumber + ") - " + error.ErrorText + "\t\tLine:" + error.Line.ToString() + "  Column:" + error.Column.ToString());
            }
            return false;
        }
    }


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 15:31

© 2014-2021

快速回复 返回顶部 返回列表