4

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());
    }
}
4

2 に答える 2

4

System.Coreアセンブリへの参照をプロジェクトに追加してみてください。名前空間のほとんどのクラスは、System.Linqそのアセンブリにあります。

それでもうまくいかない場合は、への参照を追加してみてくださいSystem.Data.Linq

今後は、コンパイラが提供するエラー メッセージの有用性を過小評価しないでください。はい、それらは不可解な場合もあれば、誤解を招く場合もあります。しかし、動作すると期待していたものがコンパイルされない理由を理解しようとしている場合、これらは確かに開始するのに適した場所です。

于 2011-01-03T08:48:21.437 に答える
4

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を見つけました...

于 2011-01-03T10:48:47.670 に答える