Pregunta

Cuando intento importar el espacio de nombres System.Linq a Boo compilador, me sale este error:

Boo.Lang.Compiler.CompilerError:

Espacio de nombres 'System.Linq' no encontrado, tal vez se le olvidó añadir una referencia de ensamblado?

Yo uso "Rhino.DSL.dll" y mi código de motor DSL está aquí:

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());
    }
}
¿Fue útil?

Solución

¿Por qué necesita System.Linq en su DSL? Sytem.Linq debe estar "escondido" en su marco. Además de utilizar LINQ en Boo, es un poco de detalle (en mi opinión) y su DSL debe ocultar esta verbosa cosas ...

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()

Acerca del uso de la System.Linq, no han intentado, pero me encontré con este enlace Boo Markmail , donde el código anterior fue copiado ...

Otros consejos

Trate de añadir una referencia a la System.Core asamblea para su proyecto. La mayoría de las clases del espacio de nombres System.Linq se encuentran en esa asamblea.

Si esto no funciona, es posible que también se trate de añadir una referencia a System.Data.Linq.

Y en el futuro, no hay que subestimar la utilidad de los mensajes de error proporcionados por el compilador. Sí, a veces son crípticos y otras veces incluso son engañosas. Pero son sin duda un lugar bueno para comenzar cuando se está tratando de averiguar por qué algo no se compilará que se espera que funcione.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top