7

脚本/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 中

4

2 回答 2

3

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

于 2013-01-02T10:38:26.183 回答
1

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

“没有找到命名空间'Pathfinding',也许你忘记添加程序集引用了?”

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

我正在将一些现有的代码从 C# 转换为 Boo。我的一个课程有一个“使用寻路”,它被脚本转换器转换为“导入寻路”。

尝试编译时出现此错误:

Assets/Script/VehicleController.boo(4,8): BCE0021: Namespace 'Pathfinding' not found,也许你忘了添加程序集引用?

我使用的 Pathfinding 库是用 C# 编写的。这会导致问题吗?我还需要做些什么来完成这项工作吗?

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

URL 被引用为有关脚本编译的更多信息的参考/来源。

于 2013-01-01T14:58:09.950 回答