以前、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 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
}
}
}
しかし、このエラーが発生する
"(1,34): エラー CS8000: この言語機能 ('初期化子を使用したオブジェクト作成式') は、Roslyn ではまだ実装されていません。"
助けてください