Mono Compiler als Dienst (MCS)

Ich möchte Monos Compiler als Dienst aus meiner regulären .NET 3.5-Anwendung übernehmen.

Ich habe die neuesten Bits (2.6.7) heruntergeladen, eine einfache Konsolenanwendung in Visual Studio erstellt und auf die Mono.CSharp-DLL verwiesen.

Dann in meiner Konsolen-App (direkt aus einem Beispiel online):

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

Dies löst eine Ausnahme bei Evaluator.Run (die erste Zeile) aus:

Illegal enum value: 2049.
Parameter name: access

Das liegt daran, dass die DLL mit Mono.exe kompiliert wurde, nicht mit csc.exe, glaube ich.

Ich habe versucht, die Mono.CSharp-DLL direkt von @ herunterzuladehttp: //tirania.org/blog/archive/2010/Apr-27.htm in der demo-repl.zip-Datei ... und das löst keine Ausnahme aus ... Allerdings ist der out-Parameter (res) nach dem Aufrufen von Evaluator.Evaluate null ... also bin ich mir nicht sicher, was schief geht. Es wird keine Ausnahme geworfen ...

Also, ich möchte herausfinden, warum die von der demo-repl.zip heruntergeladene DLL null zurückgibt.

EDIT: Ich habe herausgefunden, warum es null zurückgibt. Es scheint, als würde der Compiler aus irgendeinem Grund den System.Linq-Namespace nicht abrufen ... obwohl ich nicht sagen kann, warum ... Wenn ich nur "System.IO.Directory.GetFiles (\" C: \\ ")", es funktioniert gut

UPDATE: Es scheint definitiv, als ob etwas falsch mit dem Mono-Compiler ist, der referenzierte System-Assemblys aufnimmt. Wenn ich das Beispiel ihres csharp-Konsolentools direkt kopiere:

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

Ich bekomme die Ausnahme:

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

Auch, damit der MCS tatsächlich eine praktikable Lösung ist, muss der Compiler so geändert werden, dass er an eine einzelne dynamische Assembly sendet, anstatt eine Assembly pro Auswertungsaufruf zu senden (andernfalls tritt ein schwerwiegender Speicherverlust auf). mit dem ich mich zuvor in Form des CSharpCodeProviders befasst habe). Hat jemand eine Vorstellung davon, wie schwierig das sein wird, oder kann mich hier jemand in die richtige Richtung weisen?

Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage