2012-12-19 8 views
7

Ausführung von Skripten/ai/Dream.booEinbetten boo in C#, nicht erkennt Baugruppe

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

In der Zeile bc.Parameters.References.Add(Assembly.GetExecutingAssembly()); ich die ausgeführten Assembly hinzufügen, die den Namensraum enthält " LonelyHero ". Der Fehler

rsc/script/ai/Dream.boo(2, 8): BCE0021: Namespace LonelyHero not found. maybe you forgot to add an assembly reference?

wird jedoch angezeigt.

LonelyHero sollte existieren, warum tritt dieser Fehler auf und was kann ich tun, um es zu lösen?

Hinweis: Nach Assembly.GetExecutingAssmebly() mit Assembly.GetAssembly(typeof(Enemy)) ersetzt, wodurch sichergestellt wird es die Anordnung mit einer Klasse unter dem LonelyHero Namespace fügt hinzu, der gleiche Fehler auftritt. Auch mit Assembly.LoadFile(new DirectoryInfo("LonelyHero.exe").FullName)

in Boo Tritt 0.9.4.9 und booxw-1203

+0

Können Sie einen Link mit allen relevanten Dateien bereitstellen? Wo ist die einsame Heldenversammlung im boo Programm? Ich sehe, dass Sie es importieren, aber ich sehe nicht den Code (oder Stubs des Codes würde tun) – yumaikas

+0

LonelyHero.Enemy ist eine Klasse, die importiert werden sollte, wenn ich verstehe, was Sie fragen. –

+1

Ist Feind öffentlich? Der importierte Namespace benötigt mindestens einen öffentlichen Typ. –

Antwort

3

Importierte Namespaces in BOO müssen mindestens einen öffentlichen Typ enthalten, damit der Import erfolgreich ist. Andernfalls wirst du den BCE0021 Fehler erhalten, also solltest du sicherstellen, dass der Feindtyp öffentlich ist (oder ein anderer).

1

Ich weiß nicht, Boo oder C#, aber ich fand jemand eine ähnliche Frage auf der Boo Programmierung Google-Gruppe zu stellen. Die Frage, die sie fragten:

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

Specifically they were getting this error:

I am converting some existing code I had from C# into Boo. One of my classes had a "using Pathfinding" which got converted to "import Pathfinding" by the script converter.

I get this error when trying to compile:

Assets/Script/VehicleController.boo(4,8): BCE0021: Namespace 'Pathfinding' not found, maybe you forgot to add an assembly reference?

The Pathfinding library I'm using is written in C#. Could this cause problems? Is there anything additional I need to do to make this work?

Das ist wie Ihre Fehlermeldung geschaut und die Lösung jemand erwähnt war, dass man benötigt, um Ihre Skripte in Ihre Kompilierungsphase zu setzen früher, um sicherzustellen, dass sie zugänglich sind aus Skripte in anderen Sprachen geschrieben.

Diese URL was cited as a reference/source für weitere Informationen zur Skriptkompilierung.

+0

Diese Lösung ist nur in Unity3D relevant, ich verwende VS12 und SFML. –

+1

OK Danke, ich dachte, ich würde versuchen, für die +50 Bounty, nachdem ich meine Lösung veröffentlicht habe, sah ich Simons Kommentar fragen, ob Enemy öffentlich sei. – slm

+0

Ich glaube, ich war betrunken, als ich die Bounty anbot, weil ich schon von Boo zu IronPython gewechselt hatte. Naja, es war einen Wechsel wert. –