我正在嘗試編寫一個交互式C#教學應用程序,用戶可以在其中嘗試/更改代碼示例並查看發生了什麼(有點像jsfiddle)。在Mono.Csharp上運行一個小程序
我發現很多小表達式或者Mono.Csharp作爲運行時編譯器的REPL-like用法的例子,但我無法完全找到一個執行「小程序」的例子。
這是我的玩具代碼到目前爲止(一個MVC行動)。 「代碼」參數直接從textarea發佈。
[HttpPost]
public ActionResult Index(string code)
{
var reportWriter = new StringWriter();
var settings = new CompilerSettings();
var printer = new ConsoleReportPrinter(reportWriter);
var reports = new Report(printer);
var eval = new Evaluator(settings, reports);
var model = new CodeViewModel();
model.Code = code;
eval.Run(code);
model.Result = reportWriter.ToString();
return View("Index", model);
}
現在假設代碼是這樣的一個字符串:
using System;
public class MyClass
{
public void DoSomething()
{
Console.WriteLine("hello from DoSomething!");
}
}
如何引導這個(即實例化一個MyClass
對象,並對其調用DoSomething
)?我試過只是附加new MyClass().DoSomething();
到最後,但我得到這個:
{interactive}(1,2): warning CS0105: The using directive for `System' appeared previously in this namespace
{interactive}(1,8): (Location of the symbol related to previous warning)
{interactive}(11,1): error CS1530: Keyword `new' is not allowed on namespace elements
{interactive}(11,4): error CS1525: Unexpected symbol `MyClass', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
我缺少什麼?
你可以發佈包含MyClass類的整個文件嗎? –
MyClass代碼不在文件中,它在字符串中。 –