如何将System.Linq命名空间导入Boo?

时间:2011-01-03 08:39:05

标签: c# namespaces boo

当我尝试将System.Linq命名空间导入Boo编译器时,出现此错误:

  

Boo.Lang.Compiler.CompilerError:

     

找不到命名空间'System.Linq',也许您忘了添加程序集引用?

我使用“Rhino.DSL.dll”,我的DSL引擎代码在这里:

public class MyDslEngine : DslEngine
{
    protected override void CustomizeCompiler(BooCompiler compiler, CompilerPipeline pipeline, string[] urls)
    {
        pipeline.Insert(1, new AnonymousBaseClassCompilerStep(typeof(DslBase), "Prepare",
            "System.Linq",
            "Azarakhsh.Framework.Repository" //it's my repository framework
            ));
        pipeline.Insert(2, new UseSymbolsStep());
        pipeline.Insert(3, new RunScriptCompilerStep());
    }
}

2 个答案:

答案 0 :(得分:4)

尝试将System.Core程序集的引用添加到项目中。 System.Linq命名空间中的大多数类都可以在该程序集中找到。

如果这不起作用,您也可以尝试添加对System.Data.Linq的引用。

将来,不要低估编译器提供的错误消息的用处。是的,有时它们是神秘的,有时甚至是误导性的。但是当你试图弄清楚为什么某些东西无法编译你期望工作的时候,它们肯定是一个很好的起点。

答案 1 :(得分:3)

为什么你的DSL需要System.Linq? Sytem.Linq必须在您的框架中“隐藏”。除了在Boo中使用Linq之外,它有点冗长(在我看来),你的DSL应该隐藏这些冗长的东西......

import System.Linq.Enumerable from System.Core
bar = List of string() 
bar.Add("foo")
bar.Add("baz")

baz = bar.Where({x as string | x =="baz"}).Single()

关于使用System.Linq,还没试过,但我找到了这个链接Boo Markmail,上面的代码被复制了......