C #: как мне создать программу, которая будет запускать код, который я пробиваю в текстовое поле? - PullRequest
6 голосов
/ 02 декабря 2010

Мне было интересно, как именно я могу создать небольшое приложение, которое будет принимать мой ввод и запускать его как код.тот же свет, что и при создании IDE, но я не хочу заходить так далеко, но я хочу, чтобы он использовал FCL.Так, как если бы у меня было текстовое поле, и я набрал:

string x = "hello";
int myLength;

myLength = x.length;

Затем нажмите кнопку отправки, он скомпилирует это и запустит в окно вывода.Есть ли довольно простой способ сделать это?Или мне придется исправить довольно сложный метод, который разбивает все это?Извините, если я не совсем уверен, я не совсем уверен, как задать этот вопрос, смеется.На самом деле я хочу создать своего рода инструмент «калькулятора» кода, в котором я смогу набрать несколько простых фрагментов и проверить, что он возвращает, без необходимости создавать полный класс и компилировать просто для проверки чего-то простого.Кто-нибудь может указать мне правильное направление?

Ответы [ 6 ]

3 голосов
/ 02 декабря 2010

Я думаю, что вы ищете 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

3 голосов
/ 02 декабря 2010

Вы можете использовать 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 голосов
/ 02 декабря 2010

Вот хорошая ссылка на пространство имен CompilerServices:

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

0 голосов
/ 02 декабря 2010

В дополнение к уже предоставленным ответам PowerShell позволяет запускать код C # на лету (или из файла, если хотите).

0 голосов
/ 02 декабря 2010

В C # это будет не так просто, потому что C # - это скомпилированный язык, а не интерпретируемый.

В интерпретируемом языке довольно просто разобрать необработанный текст как язык и посмотреть результаты.

Может быть, вы бы лучше печатали на JavaScript или Perl и интерпретировали это?

0 голосов
/ 02 декабря 2010

Вы можете начать с просмотра этого предыдущего SO сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...