2013-08-29 2 views
8

Я пытаюсь создать сервер REST в рамках проекта Unity и сначала подумал, что Нэнси показалась очевидным выбором. Многие головные боли позже, однако, и я все еще возникают проблемы с получением Нэнси, чтобы запустить в режиме исполнения Unity Mono - я могу скомпилировать и запустить из Xamarin, но Unity дает мне бесполезные выход Whne Я пытаюсь использовать актив:Запуск сервера REST в 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 

Я не могу быть единственным человеком, который пробовал что-то вроде этого, и я хочу использовать его в нескольких проектах, поэтому иметь что-то повторно используемое имеет высокий приоритет - кто-нибудь успешно реализовал что-то подобное, и если да, то можете ли вы дать мне какие-то указатели?

Я бы очень хотел, чтобы Нэнси работала, но другой способ легко встраивать сервер REST был бы столь же ценным.

+0

Просто длинный выстрел - но разве это не проблема версии .NET? Unity3d, последний раз, когда я использовал его, все еще находился в версии 2.x Mono и утверждал, что использует «подмножество» среды выполнения .NET 2.0. На практике я обнаружил, что могу использовать различные функции более поздних версий .NET, но не все. С другой стороны, Нэнси, если я не ошибаюсь, стремится работать с .NET 3.5 вперед (но не в более старых версиях). –

+0

Также найдено следующее: http://answers.unity3d.com/questions/636739/reflectiontypeloadexception.html –

ответ

0

Согласно this thread on Unity Answers, это произошло потому, что .NET подмножество, что Unity использует не включают System.Web, поэтому копирование System.Web.dll v2.0.50727 для проекта решить эту проблему.

Однако, если память служит, я напоминаю вариант в Unity, чтобы заставить его использовать полную среду выполнения .NET 2.0, а не подмножество, что также может решить проблему. Это было некоторое время с тех пор, как я использовал Unity, поэтому этот вариант, возможно, был удален.

Редактировать:See here это называется «уровень совместимости».

Edit 2: Это в Player Settings

0

Я никогда не удалось получить сервер HTTP запущен в клиенте единства (принятый ответ выглядит правильно, но это было слишком поздно для меня, чтобы проверить это, позвольте мне знаете, если это не сработает) кажется, что, по крайней мере, в единстве 4 были исключены необходимые части времени выполнения моно. В единстве все может быть иначе: я не работаю с единством на данный момент, поэтому, боюсь, я не в курсе.

Учитывая это, решение, на которое я выбрал, - это клиент-клиент для прослушивания с внешним сервером - это работает достаточно хорошо, однако все становится немного более сложным, чем необходимо.

Другим решением, о котором я слышал позже, является использование протокола Thrift, есть пример в https://github.com/amilstead/unity3d-thrift-twisted, которого должно быть достаточно для начала работы, и есть поддержка для Thrift на самых разных языках, идиомы немного отличается от http, но обычно это, скорее всего, будет лучше подходит для большинства случаев, когда вам нужен встроенный сервер http.