2010-12-01 40 views
6

我想知道如何创建一个小型应用程序,它将接受我的输入并将其作为代码运行。与构建IDE相同的光源,但我不想走那么远,但我确实希望它使用FCL。所以,像如果我有一个文本框,我拳打在:c#:我如何创建一个程序,将运行代码,我冲入一个文本框?

string x = "hello"; 
int myLength; 

myLength = x.length; 

然后点击提交按钮,它会编译这并运行它变成一个输出窗口。有没有一个非常简单的方法来做到这一点?或者我将不得不纠正一个相当复杂的方法,打破这一切?对不起,如果我不完全清楚,我不完全肯定如何问这个问题大声笑。真的,我想知道的是,我想创建一种代码“计算器”工具,在那里我可以打入一些简单的代码片段,并测试它返回的内容,而无需构建完整的类并编译只是为了测试简单的东西。任何人都可以将我指向正确的方向吗?

+1

运行如果你只是想工具,下载http://www.linqpad.net/ – TrueWill 2010-12-01 22:14:21

回答

0

您可以先看看this先前的SO帖子。

+1

的CodeDOM不好在这种情况下的方法。请参阅http://stackoverflow.com/questions/2366921/reflection-emit-vs-codedom – 2010-12-01 21:17:17

0

在C#这不会是那么容易,因为C#是编译型语言,而不是一种解释型语言。

在解释型语言中,将原始文本解析为语言并查看结果相当容易。

也许你会更乐意输入JavaScript或Perl并解释它?

0

除了已经给出的答案,PowerShell允许您运行C#代码(或者如果您愿意,可以从文件中运行)。

3

你可以使用CSScript

http://www.csscript.net/

从他们的网站:

dynamic script = CSScript.LoadCode(@"using System; 
           public class Script 
           { 
            public void SayHello(string greeting) 
            { 
             Console.WriteLine(greeting); 
            } 
           }") 
           .CreateObject("*"); 
script.SayHello("Hello World!"); 
3

我想你要寻找的是LINQPad。它可以让你运行一小段代码,而无需制作一些一次性的控制台应用程序来测试。为了好玩,我写了以下内容,它将编译和执行文本框中的任何内容。

void Main() 
{ 
    TextBox textBox = new TextBox() 
    { 
     Multiline = true, 
     Size = new Size(200, 60), 
     Text = @"string x = ""hello"";int myLength;myLength = x.Length;MessageBox.Show(myLength.ToString());" 
    }; 
    Button button = new Button() 
    { 
     Location = new Point(0, 60) 
    }; 
    button.Click += new EventHandler(delegate(object sender, EventArgs e) 
     { 
      var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 
      var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.dll", "System.Windows.Forms.dll" }, "foo.exe", true); 
      parameters.GenerateExecutable = true; 
      CompilerResults results = csc.CompileAssemblyFromSource(parameters, 
      @" 
      using System.Windows.Forms; 

      namespace ConsoleApplication 
      { 
       class Program 
       { 
        static void Main(string[] args) 
        { 
         " + 
         textBox.Text 
         + @" 
        } 
       } 
      } 
      ");     
      Process proc = Process.Start("foo.exe"); 
     } 
    ); 

    Form f = new Form 
    { 
     Controls = { textBox, button } 
    }; 
    Application.Run(f); 
} 

其实我写的LINQPad但它会很容易得到Visual Studio

相关问题