Некоторое время назад я написал программу, использующую компилятор Mono в качестве службы, как
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mono.CSharp;
namespace MonoTest
{
class Program
{
static void Main(string[] args)
{
//Initializing the evaluator
Evaluator.Init(new string[0]);
//Importing namespaces
Evaluator.Run("using System;");
Evaluator.Run("using System.Linq;");
Evaluator.Run("using System.Collections.Generic;");
//Sum of 'n' numbers
Evaluator.Run("List<int> numbers= new List<int> {1,2,3,4,5,6,7,8,9,10} ;");
Evaluator.Run("var sum = numbers.Sum();");
Evaluator.Run("Console.WriteLine(sum);");
}
}
}
//вывод
55
Теперь пытаюсь сделать то же самое, используя Roslyn (мой самый первый код) [Тип проекта Roslyn: консольное приложение]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
var host = new ScriptingHost();
string codeLine = string.Empty;
codeLine += "List<int> numbers= new List<int> {1,2,3,4,5,6,7,8,9,10} ;" + Environment.NewLine;
codeLine += "var sum = numbers.Sum();";
codeLine += "Console.WriteLine(sum);";
var res = host.Execute(codeLine);
//Write the result back to console
if (res != null)
Console.WriteLine(" = " + res.ToString());
Console.ReadKey();
}
}
public class ScriptingHost
{
private ScriptEngine engine;
private Session session;
public ScriptingHost()
{
//Create a session
session = Session.Create(this);
//Create the engine, just pass the assemblies and namespaces
engine = new ScriptEngine(new Assembly[]
{
typeof(Console).Assembly,
typeof(ScriptingHost).Assembly,
typeof(IEnumerable<>).Assembly,
typeof(IQueryable).Assembly
},
new string[]
{
"System", "System.Linq",
"System.Collections",
"System.Collections.Generic"
}
);
}
//Pass the code to the engine, nothing much here
public object Execute(string code)
{
return engine.Execute(code, session); --Error at this line
}
}
}
Но получить эту ошибку
"(1,34): ошибка CS8000: эта функция языка ("выражение создания объекта с инициализатором") еще не реализована в Roslyn."
Пожалуйста помоги