2013-08-29 4 views
8

Ich versuche einen REST-Server in einem Unity-Projekt zu erstellen und dachte zunächst, dass Nancy die offensichtliche Wahl wäre. Viele Kopfschmerzen später jedoch, und ich bin immer noch Probleme Nancy immer innerhalb der Einheit Mono-Laufzeit laufen - ich kann von Xamarin kompilieren und ausführen, aber Unity gibt mir eher nicht hilfreich Ausgabe whne ich versuche, den Vermögenswert zu nutzen:Ausführen eines REST-Servers in Unity3d

Internal compiler error. See the console log for more information. output was: 
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded. 
    at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool) 
    at System.Reflection.Assembly.GetTypes() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.LoadReferences() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.Compile() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

Ich kann nicht die einzige Person sein, die so etwas versucht hat, und ich versuche, dies über mehrere Projekte hinweg zu nutzen, also hat etwas, das wiederverwendbar ist, eine hohe Priorität - hat jemand so etwas erfolgreich umgesetzt, und wenn ja, kannst du es geben mir irgendwelche Hinweise?

Ich würde wirklich gerne Nancy arbeiten, aber eine andere Möglichkeit der einfachen Einbettung eines REST-Servers wäre genauso wertvoll.

+0

Nur ein Longshot - aber ist das nicht ein Problem der .NET-Version? Unity3d zuletzt verwendete ich es immer noch auf einigen 2.x-Version von Mono, und erklärte sich selbst mit einer 'Teilmenge' der .NET 2.0-Laufzeit. In der Praxis habe ich festgestellt, dass ich verschiedene Features späterer .NET-Versionen verwenden kann, aber nicht alle. Nancy auf der anderen Seite, wenn ich mich nicht irre, zielt darauf ab, mit .NET 3.5 weiter zu arbeiten (aber nicht auf älteren Versionen). –

+0

Auch das gefunden: http://answers.unity3d.com/questions/636739/reflectiontypeloadexception.html –

Antwort

0

Nach this thread on Unity Answers, geschah es, weil die .NET-Subset, dass Unity verwendet nicht enthalten System.Web, so das Kopieren von System.Web.dll v2.0.50727 auf das Projekt dieses Problem gelöst.

Allerdings, wenn Speicher dient, ich erinnere mich an eine Option in Unity, um es zu zwingen, eine vollständige .NET 2.0 Runtime anstelle der Teilmenge zu verwenden, die das Problem auch lösen könnte. Es ist eine Weile her, dass ich Unity verwendet habe, daher wurde die Option möglicherweise entfernt.

Edit:See here es heißt "Kompatibilitätsebene".

Edit 2: Es ist in Player Settings

0

ich nie ein HTTP-Server läuft in der Einheit Klienten erhalten verwaltet, (die akzeptierte Antwort richtig aussieht, aber es war zu spät für mich, es zu testen, lassen Sie mich weiß, ob es nicht funktioniert) es scheint, dass zumindest in der Einheit 4 die notwendigen Teile der Mono-Laufzeit ausgeschlossen worden waren. Die Dinge mögen in Einheit 5 anders sein. Ich arbeite momentan nicht mit Einheit, also habe ich Angst, dass ich nicht auf dem neuesten Stand bin.

Vor diesem Hintergrund entschied ich mich für einen listening-HTTP-Client mit einem externen Server - das funktionierte einigermaßen gut, aber die Dinge werden etwas komplexer als nötig. Die andere Lösung, von der ich später hörte, ist das Thrift-Protokoll, es gibt ein Beispiel unter https://github.com/amilstead/unity3d-thrift-twisted, das ausreichen sollte, um loszulegen, und es gibt Unterstützung für Thrift in einer Vielzahl von Sprachen, die Idiome sind ein wenig anders als die von http, aber im Allgemeinen ist dies wahrscheinlich die bessere Lösung für die meisten Situationen, in denen Sie einen eingebetteten HTTP-Server möchten.