编译器作为服务执行上下文

时间:2013-08-09 14:25:49

标签: c# mono

我能做些什么来使这段代码有效吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mono.CSharp;

namespace MonoREPLTester
    {
    public class Program
        {
        static void Main(string[] args)
            {
            var evaluator = new Evaluator(new CompilerContext(new CompilerSettings(), new ConsoleReportPrinter()));        
            string mystring="hello";
            object result = evaluator.Run("mystring.IndexOf('e');");
            Console.WriteLine("Result: "+result);
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
            }
        }
    }

我目前收到警告,因为Mono上下文不了解mystring

“错误CS0103:当前上下文中不存在名称'mystring'”

1 个答案:

答案 0 :(得分:1)

您需要将其设为静态的类级变量:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mono.CSharp;
using System.Reflection;

namespace MonoREPLTester
    {
    public class Program
        {
        public static string mystring = "hello";
        static void Main(string[] args)
            {
            var evaluator = new Evaluator(new CompilerContext(new CompilerSettings(), new ConsoleReportPrinter()));
            evaluator.ReferenceAssembly(Assembly.GetExecutingAssembly());
            evaluator.Run("using MonoREPLTester;");
            object result = evaluator.Evaluate("Program.mystring.IndexOf('l');");
            Console.WriteLine("Result: " + result);
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
            }
        }
    }