Sometime back I wrote a program using Mono compiler as a service as
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);");
}
}
}
//output
55
Now trying to do the same using Roslyn (my very first code)[Roslyn Project Type:console Application]
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
}
}
}
But getting this error
“(1,34): error CS8000: This language feature (‘object creation expression with initializer’) is not yet implemented in Roslyn.”
Please help
Looks like you will have to separate the creation of your list from populating it:
Edit: or use the constructor overload which takes a list as suggested by @svick in the comments: