Как я могу импортировать пространство имен System.linq в Boo?
-
14-10-2019 - |
Вопрос
Когда я пытаюсь импортировать 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());
}
}
Решение
Зачем вам 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, не пробовал, но я нашел эту ссылку Бу Маркмаил, где был скопирован приведенный выше код ...
Другие советы
Попробуйте добавить ссылку на System.Core
сборка в ваш проект. Большинство занятий в System.Linq
Пространство имен найдено в этой сборке.
Если это не сработает, вы также можете попытаться добавить ссылку на System.Data.Linq
.
И в будущем не стоит недооценивать полезность сообщений об ошибках, предоставленных компилятором. Да, иногда они загадочны, а иногда они даже вводят в заблуждение. Но это, безусловно, хорошее место, чтобы начать, когда вы пытаетесь выяснить, почему что -то не соберется, что вы ожидали работать.