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

时间:2012-12-19 05:32:51

标签: c# dynamic compiler-construction embed boo

脚本/ AI / Dream.boo

import CultLib
import LonelyHero

class Dream(Enemy):
    pass

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

在行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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我不知道Boo或C#,但我发现有人在Boo Programming Google Group上提出了类似的问题。他们问的问题是:

"Namespace 'Pathfinding' not found, maybe you forgot to add an assembly reference?"

  

具体来说,他们收到了这个错误:

     

我正在将我从C#中获得的一些现有代码转换为Boo。我的一个   类有一个“使用Pathfinding”,它被转换为“import”   寻路“由脚本转换器。

     

尝试编译时出现此错误:

     

Assets / Script / VehicleController.boo(4,8):BCE0021:命名空间   找不到'寻路',也许你忘了添加装配   参考?

     

我正在使用的Pathfinding库是用C#编写的。这可能是因为   问题?我需要做些什么来使这项工作吗?

这看起来像是您的错误消息,有人提到的解决方案是您需要先将脚本放入编译阶段,以确保可以从其他语言编写的脚本中访问它们。

URL was cited as a reference/source有关脚本编译的更多信息。