2012-10-31 12 views
5

Dopo l'importazione dei DLL Jabber-net da here nel mio progetto e l'esecuzioneerrore del compilatore interno integrando jabber-net con Unity3d

using UnityEngine; 
using System.Collections; 
using jabber; 
using jabber.client; 
using jabber.connection; 

public class XMPP : MonoBehaviour { 

    jabber.client.JabberClient jC; 

     // Use this for initialization 
     void Start() { 
     jC = new JabberClient(); 
    } 
} 

Unità si lamenta con:

errore del compilatore interno. Vedere il log della console per ulteriori informazioni. output era: Eccezione non gestita: System.TypeLoadException: impossibile caricare il tipo 'jabber.connection.XmppStream' dall'assembly 'jabber-net, versione = 2.1.0.710, Culture = neutral, PublicKeyToken = 924c5b18328d6f09'.

Ho letto che altri (alcuni molto pochi) sono riusciti a ottenere jabber-net integrato con il loro codice Unity. Qualcuno potrebbe far luce su come ciò potrebbe essere fatto o indirizzarmi verso una biblioteca alternativa? Mi piacerebbe molto poter utilizzare XMPP nel mio progetto.

Grazie

Modifica

Grazie @Calvin per fornire la risposta utile e aiutare me drill-down per il problema.

Procedura per la risoluzione:

  1. compilare le DLL in MonoDevelop escludendo System.Drawing e System.Windows.Form (Change build target per essere raccolta, invece di eseguibile)
  2. Importare le DLL nella plugin cartella (non una cartella casuale)
  3. Cambiare l'Unità costruire bersaglio di essere Net 2.0 (2.0 sottoinsieme non Net) e istruzioni al fine di spogliare bytecode
  4. Eliminare la cartella SystemAssemblies per forzare una ricompilazione

Postmortem

E ... questo approccio sembra fallire. Compilare a ios sembra interrompere la catena di dipendenze con ExecutionEngineException: Tentativo di metodo di compilazione JIT '(wrapper managed-to-native) System.Threading.Interlocked: CompareExchange (jabber.protocol.ProtocolHandler &, jabber.protocol.ProtocolHandler, jabber.protocol .ProtocolHandler) 'mentre è in esecuzione con --aot-only.

+2

Per curiosità, stai usando le DLL Mono? Credo che Unity sia basato su Mono e non sul framework Microsoft .NET. – ravuya

+0

Sì, sto usando le DLL Mono. – jeremyong

+0

Il sito jabber-net non dice quali versioni di .Net supporta. Potrebbe essere necessario compilarlo dal sorgente in MonoDevelop e vedere se ci sono opzioni di compilazione su target .Net 2.0. – Calvin

risposta

4

Ho appena potuto compilare la soluzione jabber-net 2005 in MonoDevelop e aggiungerla a un progetto Unity 3.5.6 senza che Unity generi un errore del compilatore.

La soluzione aveva riferimenti a System.Drawing e System.Windows.Forms, che Unity non supporta. Ho rimosso quelli, cambiato il target di compilazione in "Library" e copiato il 2005-jabber-net.dll, netlib.Dns.dll e zlib.net.dll nel progetto Unity.

Il codice di esempio è stato compilato e eseguito quando è collegato a un GameObject, ma non ho eseguito ulteriori verifiche.

modifica: Ho appena realizzato che questo assembly potrebbe richiedere Unity Pro, poiché l'accesso al socket .Net è limitato nella versione gratuita di Unity.

doppia modifica: riprendo quello, ho appena controllato la tabella di confronto dei prodotti e ora.Le prese di rete sono elencate come disponibili nella versione gratuita di Unity.

+0

Grazie per aver provato questo @Calvin. Ho tentato di fare lo stesso sulla mia fine: 1. Rimuovere i riferimenti System.Drawing e System.Windows.Forms 2. Modificare la destinazione nella libreria 3. Impostare la configurazione su Release 4. Impostare il framework su Build come Mono 2.0 Quando copio le DLL sul progetto di unità ora ottengo: Errore interno del compilatore. Vedere il log della console per ulteriori informazioni. output era: Eccezione non gestita: System.TypeLoadException: impossibile caricare il tipo 'System.Runtime.Versioning.TargetFrameworkAttribute' dall'assembly 'xmpp'. Qualche idea? – jeremyong

+0

Inoltre, dovrei menzionare che in effetti sto utilizzando una licenza Unity Pro. – jeremyong

+0

Penso di aver trovato il problema. Le jabber dll devono essere nella cartella Plugin del tuo progetto Unity (Risorse/Plugin/jabber/*. Dll. Questo cambia l'ordine di compilazione, ma non so perché lo corregge. – Calvin

Problemi correlati