在C#中嵌入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中
BOO中的导入名称空间需要至少包含一个公用类型才能使导入成功; 否则你会得到BCE0021
错误,所以你想确保敌人类型是公开的(或另一个)。
我不知道Boo或C#,但是我发现有人在Boo Programming Google Group上提出类似的问题。 他们问的问题是:
“命名空间Pathfinding'找不到,也许你忘了添加程序集引用?”
特别是他们得到这个错误:
我将一些现有的代码从C#转换为Boo。 我的一个类有一个“使用Pathfinding”,它被脚本转换器转换为“import Pathfinding”。
尝试编译时出现此错误:
Assets / Script / VehicleController.boo(4,8):BCE0021:Namespace'Pathfinding'找不到,可能您忘记添加程序集引用了?
我正在使用的Pathfinding库是用C#编写的。 这会导致问题吗? 有什么额外的我需要做的,以使这项工作?
这看起来像是你的错误信息,而有人提到的解决方案是你需要提前将你的脚本放到编译阶段,以确保它们可以用其他语言编写的脚本访问。
该URL被引用为脚本编译更多信息的参考资料。
链接地址: http://www.djcxy.com/p/67479.html上一篇: Embedding boo in C#, does not recognise executing assembly