Kullanıcının kod örneklerini deneyebileceği/değiştirebileceği ve neler olduğunu görebileceği etkileşimli bir C# öğretme uygulaması yazmaya çalışıyorum (jsfiddle gibi).Mono.Csharp'da bir mini program çalıştırılıyor
Mono.Csharp'ın çalışma zamanı derleyicisi olarak küçük ifadeler veya REPL benzeri kullanımlar için birçok örnek buldum, ancak bir "mini program" ın yürütüldüğü bir örnek bulamıyorum.
Buraya kadar benim oyuncak kodum (MVC eylemi). "Kod" parametresi doğrudan bir textarea'dan gönderilir. Bunun (yani bir MyClass
nesnesini başlatmalı ve üzerinde DoSomething
diyoruz) bootstrap nasıl
using System;
public class MyClass
{
public void DoSomething()
{
Console.WriteLine("hello from DoSomething!");
}
}
:
[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);
}
Şimdi kod böyle bir dize olduğunu varsayalım? Sadece sonuna new MyClass().DoSomething();
ekleme denedim ama bu alın:
{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'
ben eksik? bu soru zaten kabul edilmiş olmasına rağmen ben bu yazı karşılaştım zaman
MyClass sınıfını içeren tüm dosyayı gönderir misiniz? –
MyClass kodu bir dosyada değil, bir dizede. –