Использование компилятора Mono C # в качестве службы (ошибка) - PullRequest
3 голосов
/ 01 января 2011

Я относительно новичок в Mono и пытаюсь добавить возможности сценариев C # в свое приложение. Я нашел это сообщение в блоге Мигеля де Иказа. Чтобы вызвать компилятор C # как сервис, нужно включить Mono.CSharp и использовать класс Evaluator, в частности методы Evaluate или Run. Это задокументировано здесь .

Итак, вот мой пример кода (полученный из других сообщений в блоге в Интернете на эту тему, да, я сделал поиск в Google)

using System;
using Mono.CSharp;

namespace EvalTest
{
  public class Test
  {
    static void Main(string [] args)
    {
      Mono.CSharp.Evaluator.Evaluate("using System;");
      Mono.CSharp.Evaluator.Run("using System;");
    }
  }
}

И когда мы пытаемся скомпилировать его, я получаю следующие ошибки:

eval.cs(10,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference?
eval.cs(11,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference?

То же самое происходит в Linux и OSX с использованием всех компиляторов Mono, я даже попробовал Silverlight. Я искал stackoverflow для похожих вопросов, все ссылаются на сообщение в блоге Мигеля и некоторые похожие примеры кода. Что мне не хватает? Есть ли какой-нибудь флаг компилятора, который мне нужно добавить? Спасибо за вашу помощь.

Ответы [ 2 ]

6 голосов
/ 01 января 2011

Вы следили за этой частью поста в блоге:

Использование очень просто, вы должны ссылаться на сборку `gmcs.exe '

? Вот что я сделал с вашим кодом (в Test.cs):

c:\Users\Jon\Test>copy "c:\Program Files (x86)\Mono-2.8"\lib\mono\2.0\gmcs.exe .
        1 file(s) copied.

c:\Users\Jon\Test>gmcs /r:gmcs.exe Test.cs

c:\Users\Jon\Test>mono Test.exe

Unhandled Exception: System.ArgumentException:
  The expression did not set a result
  at Mono.CSharp.Evaluator.Evaluate (System.String input) [...]
  at EvalTest.Test.Main (System.String[] args) [...]

Справедливо, что это не дает никакого результата - это всего лишь директива using. Это работает хорошо, хотя:

Mono.CSharp.Evaluator.Run("System.Console.WriteLine(5 + 5);");
2 голосов
/ 01 января 2011

Вам не хватает ссылки на сборку?

Это одно из тех сообщений о психических ошибках, которые обычно бывают правильными в 95% случаев.Вернитесь к сообщению в блоге и запомните эту строку:

Использование очень просто, вы должны ссылаться на сборку `gmcs.exe '

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