Как я могу импортировать пространство имен System.Linq в Boo? - PullRequest
4 голосов
/ 03 января 2011

Когда я пытаюсь импортировать пространство имен 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 ]

4 голосов
/ 03 января 2011

Попробуйте добавить ссылку на сборку System.Core в ваш проект. Большинство классов в пространстве имен System.Linq находятся в этой сборке.

Если это не такВо-вторых, вы можете попробовать добавить ссылку на System.Data.Linq.

. В будущем не стоит недооценивать полезность сообщений об ошибках, предоставляемых компилятором.Да, иногда они загадочны, а иногда даже вводят в заблуждение.Но они, безусловно, являются хорошим началом, когда вы пытаетесь понять, почему что-то не скомпилируется, как вы ожидали.

3 голосов
/ 03 января 2011

Зачем вам нужен System.Linq в вашем DSL? Sytem.Linq должен быть «скрыт» в вашей структуре. Помимо использования Linq в Boo, он довольно многословен (на мой взгляд), и ваш 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 , где скопирован код выше ...

...