2014-02-05 121 views
0

我想问你解释如何使用roslyn作为服务将它集成到我开发的应用程序中?Roslyn编译器作为服务

另外,我怎么能使用它作为编译器,采取代码形式的用户,并产生输出?

我寻觅了很多,但我不明白,

我有一个简单的解决方案已经开始,但也存在一些误区:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using Roslyn.Scripting; 
using Roslyn.Scripting.CSharp; 
namespace RoslynTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ScriptEngine engine = new ScriptEngine(); 
      Session session = Session.Create(); 
      engine.Execute("using system;", session); 
      engine.Execute("for(int i=0;i<10; i++) console.writeLine(i*1); ", session); 
     } 
    } 
} 

的错误是:

错误1'Roslyn.Scripting.Session'不包含'Create'的定义

错误2'Roslyn.Scripting.CS harp.ScriptEngine'没有包含'Execute'的定义,也没有找到接受'Roslyn.Scripting.CSharp.ScriptEngine'类型的第一个参数的扩展方法'Execute'(你是否缺少using指令或程序集引用? )

+0

为什么你认为这应该工作呢?你使用了一些教程或什么?这些看起来就像编译期间常见的语法错误。另外,请确保您引用了所有必需的库,这是可能导致此类问题的常见错误。 – Luaan

+1

即使编译出来,你也知道C#是一个区分大小写的语言,对吧? – svick

+0

我是这种编程类型的新手。你有任何有用的教程,请 –

回答

1

你这样做是错的。

首先,您需要将引用添加到相应的编译程序集。

Roslyn.Compilers.dll
Roslyn.Compilers.CSharp.dll

加入你可能想要的任何using线。

using Roslyn.Scripting.CSharp; 

然后创建引擎,您的会话并运行您的代码。

var engine = new ScriptEngine(); 
var session = engine.CreateSession(); 
session.Execute("using System;"); 
session.Execute("for (int i = 0; i < 10; i++) Console.WriteLine(i);"); 
+0

谢谢杰夫的帮助..但是,我是这种类型的程序中的新。你有任何教程。 –

+0

我没有任何教程方便。我的建议是只是玩弄它。浏览不同的命名空间和可用的类。让intellisense指导你。你看到的名字通常是一个非常好的指标。尝试把东西放在一起,看看它是否有效。当然,这需要时间,但这是学习最好的方法之一,尤其是使用新技术。 –