在C#中嵌入boo,无法识别正在执行的程序集

Gav*_*ann 7 c# embed compiler-construction boo dynamic

脚本/ AI/Dream.boo

import CultLib
import LonelyHero

class Dream(Enemy):
    pass
Run Code Online (Sandbox Code Playgroud)

C#

var bc = new BooCompiler();
bc.Parameters.Input.Add(new FileInput("rsc/script/ai/" + "Dream" + ".boo"));
bc.Parameters.Pipeline = new CompileToMemory();
bc.Parameters.References.Add(Assembly.GetExecutingAssembly());
bc.Parameters.References.Add(Assembly.LoadFile(new DirectoryInfo("CultLib.dll").FullName));
bc.Parameters.References.Add(Assembly.LoadFile(new DirectoryInfo("sfmlnet-audio-2.dll").FullName));
bc.Parameters.References.Add(Assembly.LoadFile(new DirectoryInfo("sfmlnet-graphics-2.dll").FullName));
bc.Parameters.References.Add(Assembly.LoadFile(new DirectoryInfo("sfmlnet-window-2.dll").FullName));

var cc = bc.Run();

if(cc.GeneratedAssembly!=null)
{
    cc.GeneratedAssembly.CreateInstance("Dream", true, BindingFlags.NonPublic, null,
                                        new object[] {Parent, pos}, null, null);
}
else
{
    foreach (var error in cc.Errors)
        Console.WriteLine(error);
}
Run Code Online (Sandbox Code Playgroud)

在该行中,bc.Parameters.References.Add(Assembly.GetExecutingAssembly());我添加了执行程序集,其中包含名称空间"LonelyHero".但是,错误

rsc/script/ai/Dream.boo(2,8):BCE0021:未找到命名空间LonelyHero.也许你忘了添加装配参考?

出现.

LonelyHero应该存在,为什么会出现此错误,我该怎么做才能解决它?

注意:替换Assembly.GetExecutingAssmebly()Assembly.GetAssembly(typeof(Enemy)),从而确保它在LonelyHero命名空间下添加了一个类,同样的错误发生.还有Assembly.LoadFile(new DirectoryInfo("LonelyHero.exe").FullName)

发生在Boo 0.9.4.9和booxw-1203中

Sim*_*ier 3

BOO 中导入的命名空间需要至少包含一种公共类型才能成功导入;否则你会得到BCE0021错误,所以你要确保 Enemy 类型是公共的(或其他类型)。