【问题标题】:c#: how do i create a program that will run code that i punch into a text box?c#:如何创建一个程序来运行我在文本框中输入的代码?
【发布时间】:2011-05-18 18:22:20
【问题描述】:

我想知道如何才能创建一个小应用程序来接受我的输入并将其作为代码运行。与构建 IDE 相同,但我不想走那么远,但我确实希望它使用 FCL。就像我有一个文本框并且我打卡一样:

string x = "hello";
int myLength;

myLength = x.length;

然后点击提交按钮,它会编译并运行到输出窗口。有没有一种非常简单的方法可以做到这一点?或者我将不得不纠正一个相当复杂的方法来打破这一切?抱歉,如果我不完全清楚,我对如何问这个问题并不完全肯定,哈哈。我真正想要的是,我想创建一种代码“计算器”工具,我可以在其中输入一些简单的 sn-ps 并测试它返回的内容,而无需构建完整的类并编译只是为了测试一些东西简单的。谁能指出我正确的方向?

【问题讨论】:

  • 如果你只是想要这个工具,下载linqpad.net

标签: c# ide


【解决方案1】:

这是 CompilerServices 命名空间的一个很好的链接:

http://www.codeproject.com/KB/vb/DotNetCompilerArticle.aspx

【讨论】:

    【解决方案2】:

    你可以使用 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 中运行会很容易

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        【解决方案5】:

        在 C# 中这并不容易,因为 C# 是编译语言,而不是解释语言。

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-17
            • 2015-01-12
            • 2020-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-28
            相关资源
            最近更新 更多