Моно-компилятор как услуга (MCS)

Я бы хотел использовать компилятор Mono как сервис из моего обычного приложения .NET 3.5.

Я скачал последние версии (2.6.7), создал простое консольное приложение в Visual Studio и ссылался на dll Mono.CSharp.

Затем в моем консольном приложении (прямо из примера онлайн):

    Evaluator.Run("using System; using System.Linq;");
    bool ress;
    object res;
    Evaluator.Evaluate(
         "from x in System.IO.Directory.GetFiles (\"C:\\\") select x;",
         out res, out ress);

    foreach (var v in (IEnumerable)res)
    {
        Console.Write(v);
        Console.Write(' ');
    }

Это вызывает исключение в Evaluator.Run (первая строка):

Illegal enum value: 2049.
Parameter name: access

Это потому, что DLL был скомпилирован с использованием Mono.exe, а не csc.exe, я считаю.

Я пытался скачать dll Mono.CSharp прямо сhttp://tirania.org/blog/archive/2010/Apr-27.html в файле demo-repl.zip ... и это не вызывает исключения ... Однако параметр out (res) после вызова Evaluator.Evaluate имеет значение null ... поэтому я не уверен, что происходит не так. Не исключение брошено ...

Итак, я хотел бы выяснить, почему DLL, которую я скачал с demo-repl.zip, возвращает ноль.

РЕДАКТИРОВАТЬ: я понял, почему он возвращает ноль. Кажется, по какой-то причине компилятор не захватывает пространство имен System.Linq ... хотя я не могу сказать, почему ... Если я просто оцениваю "System.IO.Directory.GetFiles (\" C: \\ ")", работает нормально.

ОБНОВЛЕНИЕ: Определенно кажется, что что-то не так с компилятором Mono, собирающим ссылки на системные сборки. Если я напрямую скопирую образец их инструмента консоли csharp:

csharp> var list = new int [] {1,2,3};
csharp> var b = from x in list
   >    where x > 1
   >    select x;
csharp> b;

Я получаю исключение:

{interactive}(1,25): error CS1935: An implementation of `Select' query expressio
n pattern could not be found. Are you missing `System.Linq' using directive or `
System.Core.dll' assembly reference?

Кроме того, для того чтобы MCS действительно было выполнимым решением, мне нужно изменить компилятор так, чтобы он генерировал одну динамическую сборку, а не одну сборку на вызов вычисления (в противном случае это приводит к значительной утечке памяти, которая Я имел дело с ранее в виде CSharpCodeProvider). Кто-нибудь имеет представление о том, насколько это будет сложно, или кто-то может указать мне правильное направление здесь?

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос