Tôi đang cố viết một ứng dụng dạy học C# tương tác, trong đó người dùng có thể thử nghiệm/thay đổi các ví dụ mã và xem điều gì xảy ra (kinda như jsfiddle).Chạy chương trình mini ở Mono.Csharp
Tôi đã tìm thấy rất nhiều ví dụ cho các biểu thức nhỏ hoặc sử dụng REPL giống như Mono.Csharp như trình biên dịch thời gian chạy, nhưng tôi không thể tìm thấy ví dụ trong đó "chương trình mini" được thực thi.
Đây là mã đồ chơi của tôi cho đến nay (một hành động MVC). Tham số "mã" được đăng trực tiếp từ vùng văn bản.
[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);
}
Bây giờ giả sử mã là một chuỗi như thế này:
using System;
public class MyClass
{
public void DoSomething()
{
Console.WriteLine("hello from DoSomething!");
}
}
Làm thế nào để bootstrap này (ví dụ: tạo một đối tượng MyClass
và gọi DoSomething
vào nó)? Tôi đã thử chỉ cần thêm new MyClass().DoSomething();
vào cuối, nhưng tôi nhận được điều này:
{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'
Tôi đang thiếu gì?
Bạn có thể đăng toàn bộ tệp có chứa lớp MyClass không? –
Mã MyClass không có trong tệp, nó nằm trong một chuỗi. –