2012-12-19 9 views
7

scripts/AI/Dream.booIncorporare boo in C#, non riconosce l'esecuzione di assemblaggio

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

Nella linea bc.Parameters.References.Add(Assembly.GetExecutingAssembly()); aggiungo l'assemblea di esecuzione, che contiene lo spazio dei nomi " LonelyHero". Tuttavia, viene visualizzato l'errore

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

.

LonelyHero dovrebbe esistere, perché si verifica questo errore e cosa posso fare per risolverlo?

Nota: Sostituendo Assembly.GetExecutingAssmebly() con Assembly.GetAssembly(typeof(Enemy)), assicurando così aggiunge l'assieme con una classe sotto il namespace LonelyHero, si verifica lo stesso errore. Anche con Assembly.LoadFile(new DirectoryInfo("LonelyHero.exe").FullName)

si verifica in Boo 0.9.4.9 e booxw-1203

+0

Potresti fornire un collegamento con tutti i file pertinenti? Inoltre, dov'è l'assemblea dell'eroe solitario nel programma boo? Vedo che lo stai importando, ma non vedo il codice (o gli stub del codice farebbero) – yumaikas

+0

LonelyHero.Enemy è una classe che dovrebbe essere importata, se capisco quello che chiedi. –

+1

Il nemico è pubblico? Lo spazio dei nomi importato richiede almeno un tipo pubblico. –

risposta

3

Gli spazi dei nomi importati in BOO devono contenere almeno un tipo pubblico affinché l'importazione abbia esito positivo; altrimenti otterrai l'errore BCE0021, quindi assicurati che il tipo di nemico sia pubblico (o altro).

1

non so Boo o C#, ma ho trovato qualcuno che chiedeva una domanda simile sul Boo di programmazione di Google Group. La domanda che stavano chiedendo:

"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?

Questo sembrava il messaggio di errore e la soluzione era qualcuno ha detto che avevi bisogno di mettere i vostri script nella vostra fase di compilazione in precedenza al fine di garantire che siano accessibili da script scritti in altre lingue.

Questo URL was cited as a reference/source per ulteriori informazioni sulla compilazione di script.

+0

Questa soluzione è rilevante solo in Unity3D, sto usando VS12 e SFML. –

+1

OK Grazie, ho pensato di provare per la taglia 50, dopo aver postato la mia soluzione ho visto il commento di Simon che chiedeva se Enemy fosse pubblico. – slm

+0

Penso di essere stato ubriaco quando ho offerto il premio perché ero già passato da Boo a IronPython. Oh bene, valeva la pena di tornare indietro. –