5
我對使用Roslyn執行C#腳本時如何添加引用有點困惑。如何使用最新的Roslyn API(C#腳本執行)添加引用
我正在使用通過NuGet安裝的最新版本的API(1.2.20906.2)。
我在Google上搜索了很多帖子,但是由於我發現了許多示例,API有顯着的變化。
爲了說明我想要實現:
using System;
using Roslyn.Scripting.CSharp;
namespace Test.ConsoleApp
{
public class Program
{
static void Main(string[] args)
{
new ScriptRunner().RunScripts();
}
}
public class ScriptRunner
{
public void RunScripts()
{
var engine = new ScriptEngine();
var session = engine.CreateSession();
session.AddReference("System");
session.AddReference("System.Linq");
// The following script runs successfully
session.Execute(@"using System;
var arr = new[] {1, 2, 6};
foreach (var i in arr)
{
if(i > 1)
{
Console.WriteLine(i);
}
}"
);
// The following script using Linq fails
session.Execute(@"using System;
using System.Linq;
var arr = new[] {1, 2, 6};
var arrResult = arr.Where(x => x > 1);
foreach (var i in arrResult)
{
Console.WriteLine(i);
}"
);
Console.ReadLine();
}
}
}
UPDATE - 修改包括在回答表明,加上路徑引用到DLL:
using System;
using Roslyn.Scripting.CSharp;
namespace Test.ConsoleApp
{
public class Program
{
static void Main(string[] args)
{
new ScriptRunner().RunScripts();
}
}
public class ScriptRunner
{
public void RunScripts()
{
var engine = new ScriptEngine();
var session = engine.CreateSession();
session.AddReference("System");
session.AddReference("System.Core"); // This reference is required to use Linq language features
session.AddReference("System.Linq");
session.Execute(@"using System;
using System.Linq;
var arr = new[] {1, 2, 6};
var arrResult = arr.Where(x => x > 1);
foreach (var i in arrResult)
{
Console.WriteLine(i);
}"
);
// Example use of adding reference to external project by path to dll
session.AddReference(@"E:\SVN\CSharpRoslynTesting\CSharpRoslynTesting\Test.ExternalLibraryTest\bin\Debug\Test.ExternalLibraryTest.dll");
session.Execute(@"using System;
using Test.ExternalLibraryTest;
var externalTestClass = new ExternalTestClass();
externalTestClass.TestOutput();
"
);
Console.ReadLine();
}
}
}
非常好,這就是我們所需要的。出現System.Core是在針對.NET Framework v 3.5時自動引用的。來源:http://blogs.msdn.com/b/pedram/archive/2007/11/07/system-core-dll-of-net-framework-3-5.aspx?Redirected=true – gb2d
很高興我幫助: )我正在處理相同的問題。希望隨着MS越來越接近發佈,我們獲得更多最新的文檔和樣本! –
與我以前看過的較舊的文檔相比,我在這個最新版本的API中看到的看起來要簡單得多。我想知道是否有一種方法可以自動解析腳本以獲取所需的引用。我想在某種正則表達式解析器中構建起來並不算什麼,儘管這種方式與Roslyn在這裏做的事情背道而馳! – gb2d