2016-12-16 2 views
0

я разработал метод, чтобы проверить, если сценарий есть ошибки:Рослины скрипта получает ошибку при добавлении методов/Fuctions

public static object Test(string code, string references) 
    { 
     try 
     { 
      Compilation compilation = CSharpScript.Create(code, 
       options: ScriptOptions.Default 
        .AddReferences(references) 
        .AddImports("System.Collections.Specialized", "System.Linq", "System.Net"), 
        globalsType: typeof(ScriptObject) 
      ).GetCompilation(); 
      using (var ms = new MemoryStream()) 
      { 
       EmitResult result = compilation.Emit(ms); 

       if (!result.Success) 
       { 
        var failures = result.Diagnostics.Where(diagnostic => 
         diagnostic.IsWarningAsError || 
         diagnostic.Severity == DiagnosticSeverity.Error).Select(s => s.GetMessage()); 

        return (new { Success = false, ErrorMessage = failures }); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      return (new { Success = false, ErrorMessage = e.Message }); 
     } 
     return (new { Success = true }); 
    } 

Если я побежал простого код тестового проход OK

Но если добавить к коде метод/функция, я получаю исключение. Пример:

int Add(int x, int y) { 
    return x+y; 
}; 
Add(1, 4) 

Взято отсюда: https://blogs.msdn.microsoft.com/cdndevs/2015/12/01/adding-c-scripting-to-your-development-arsenal-part-1/

Я получаю ошибку

; Ожидается, Запятая после приема или аксессора блока не является действительным, только назначением, вызова, увеличения, уменьшения, и новые выражений объекта может быть использован в качестве заявления

Ошибки в «возвращении х + у;» предложение, если я добавлю «int c = x + y;» Я получаю ошибку на этой линии

Ожидается, что она будет работать, не так ли?

ответ

2

Поскольку ошибка пытается сказать вам, вы не можете поместить точку с запятой после объявления метода.

Вы можете увидеть это ясно here

Удалите точку с запятой, и вы будете в порядке.

Смежные вопросы