Compilador mono como serviço (MCS)

Eu gostaria de consumir o compilador do Mono como um serviço do meu aplicativo .NET 3.5 regular.

Fiz o download dos bits mais recentes (2.6.7), criei um aplicativo de console simples no Visual Studio e referenciei a dll Mono.CSharp.

Em seguida, no meu aplicativo de console (direto de uma amostra on-line):

    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(' ');
    }

Isso lança uma exceção em Evaluator.Run (a primeira linha):

Illegal enum value: 2049.
Parameter name: access

Isso ocorre porque a dll foi compilada usando o Mono.exe, não o csc.exe, acredito.

Eu tentei baixar a dll Mono.CSharp diretamente dehttp://tirania.org/blog/archive/2010/Apr-27.html no arquivo demo-repl.zip ... e isso não gera uma exceção ... No entanto, o parâmetro out (res) após chamar o Evaluator.Evaluate é nulo ... então não tenho certeza do que está errado. Nenhuma exceção é lançada ...

Então, gostaria de descobrir por que a dll que baixei do demo-repl.zip retorna nula.

EDIT: Eu descobri por que ele retorna nulo. Parece que, por algum motivo, o compilador não está pegando o espaço para nome System.Linq ... embora eu não saiba por que ... Se eu apenas avaliar "System.IO.Directory.GetFiles (\" C: \\ ")", Funciona bem.

UPDATE: Definitivamente, parece que há algo errado com o compilador Mono escolhendo os assemblies de sistema referenciados. Se eu copiar diretamente a amostra da ferramenta do console csharp:

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

Eu recebo a exceção:

{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?

Além disso, para que o MCS seja realmente uma solução viável, precisarei modificar o compilador para que ele emita para um único assembly dinâmico, em vez de emitir um assembly por chamada de avaliação (caso contrário, ele apresenta um grande vazamento de memória, que Já lidei com isso na forma de CSharpCodeProvider). Alguém tem uma idéia de quão difícil isso será ou alguém pode me indicar a direção certa aqui?

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion