Domanda

Quando provo ad importare lo spazio dei nomi System.Linq a Boo compilatore, ottengo questo errore:

Boo.Lang.Compiler.CompilerError:

Namespace 'System.Linq' non trovato, forse ti sei dimenticato di aggiungere un riferimento all'assembly?

Io uso "Rhino.DSL.dll" e il mio codice motore DSL è qui:

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());
    }
}
È stato utile?

Soluzione

Perché avete bisogno di System.Linq nella vostra DSL? Sytem.Linq deve essere "nascosto" nel quadro. Oltre a utilizzare Linq a Boo, è un pò di verbose (a mio parere) e la vostra DSL dovrebbe nascondere questo verboso roba ...

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

Informazioni sull'uso del System.Linq, non hanno provato, ma ho trovato questo link Boo Markmail , dove il codice di cui sopra è stato copiato ...

Altri suggerimenti

Prova ad aggiungere un riferimento al System.Core assemblea al vostro progetto. La maggior parte delle classi del namespace System.Linq si trovano in quella assemblea.

Se questo non dovesse funzionare, si potrebbe anche provare ad aggiungere un riferimento a System.Data.Linq.

E in futuro, non sottovalutare l'utilità dei messaggi di errore forniti dal compilatore. Sì, a volte sono criptici e altre volte sono addirittura fuorvianti. Ma sono certamente un buon posto per iniziare quando si sta cercando di capire perché qualcosa non verrà compilato che si aspetta di lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top