2013-07-08 2 views
0

У меня есть следующий простой код:Почему использование system.messaging в Unity вызывает Unhandled Exception?

using UnityEngine; 
using System; 
using System.Messaging; 
using System.IO; 
using RabbitMQ; 
using Mono.Messaging; 
using Mono.Messaging.RabbitMQ; 

namespace NB.src.ui { 

    public class NBMessage {  

     public void Init() { 
      Message msg = new Message();//build pass 
      if(!MessageQueue.Exists(".\\myQueue"))//error 
      { 
       MessageQueue.Create(".\\myQueue"); 
      } 
     } 

я получаю следующие ошибки:

Необработанное исключение: System.TypeLoadException: Не удалось загрузить тип ' System.Messaging.MessageQueue' из сборки " System.Messaging, Версия = 2.0.0.0, Культура = нейтраль, PublicKeyToken = b03f5f7f11d50a3a '.

по телефону (оберточной удалось к родным) System.MonoType: GetMethodsByName (строка, System.Reflection.BindingFlags, BOOL, System.Type)

на System.MonoType.GetMethods (BindingFlags bindingAttr) [0x00000 ] в: 0

на Mono.CSharp.MemberCache.AddMethods (BindingFlags Б.Ф., System.Type типа) [0x00000] в: 0

в Mono.CSharp.MemberCache.AddMethods (тип System.Type) [0x00000] in: 0

на Mono.CSharp.MemberCache..ctor (IMemberContainer контейнер) [0x00000] в: 0

на Mono.CSharp.TypeHandle..ctor (типа System.Type) [0x00000] в : 0

в Mono.CSharp.TypeHandle.GetTypeHandle (System.Type т) [0x00000] в : 0: 0

в Mono.CSharp.TypeHandle.GetMemberCache (System.Type т) [0x00000] в

на Mono.CSharp.TypeManager.MemberLookup_FindMembers (System.Type т, MemberTypes Мт, BindingFlags Bf, имя System.String, System.Boolean & used_cache) [0x00000] в: 0

на Mono.CSharp.TypeManager. RealMemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes м, BindingFlags original_bf, System.String имя, IList almost_match) [0x00000] в: 0

в Mono.CSharp.TypeManager .MemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes мт, BindingFlags original_bf, System.String имя, IList almost_match) [0x00000] в: 0

Что может привести к этому, и как я могу решить эту проблему?

+0

Вам действительно нужно предоставить более подробную информацию. Это происходит при сборке? Во время выполнения? Вы действительно включили эту сборку в качестве ссылки в свой проект? – gwin003

+0

Создайте Ok в моно, но появится ошибка в единстве. – user2561468

+0

код слишком прост, с помощью UnityEngine; с использованием системы; с использованием System.Messaging; с использованием System.IO; с использованием RabbitMQ; с использованием Mono.Messaging; с использованием Mono.Messaging.RabbitMQ; имен NB.src.ui { \t общественного класса NBMessage \t {\t \t \t \t общественного недействительными Init() \t \t { \t \t \t Сообщение тзд = новое сообщение(); // создать проход \t \t \t \t \t \t если (! MessageQueue.Exists ("\\ myQueue")) // ошибка \t \t \t { \t \t \t \t MessageQueue.Create (". \\ myQueue"); \t \t \t} \t \t} – user2561468

ответ

1

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

Один из этих способов должны работать для вас:

Способ 1: Добавить конкретную LIBS к вашему проекту Unity3D

Шаг 1: Создайте папку «Plugins» в папке активов вашего проекта ,

Шаг 2: Скопируйте недостающие библиотеки (DLL-файлы) вы хотите от своей папки: Путь к единству \ Unity \ Editor \ Data \ MonoBleedingEdge \ Lib \ моно \ 2.0 в папку, созданную на шаге 1

* Также обратите внимание, что таким образом можно добавить некоторые .NET 3.5 и выше функциональности (я использовал его успешно с System.Xml.Linq.dll и System.Linq.dll)

Way 2 : Добавить более крупное подмножество поддерживаемых Mono 2.0 библиотек в Unity:

Я не уверен, если это будет работать для конкретных библиотек вы упомянули, но я добавил его для полноты

Шаг 1: Меню> Правка> Настройки проекта> игрока

Шаг 2: в окне инспектора, который появляется открытые «Другие настройки»

Шаг 3: под «Оптимизация» ярлык, изменить «Api уровень совместимости» от «.NET 2.0 подмножество» в».NET 2.0"

* Обратите внимание, что это все еще не поддерживает все Mono 2.0 - но более крупное подмножество.

Надеюсь, что эта помощь

+0

о, мой бог, это нормально, ТКС очень много. – user2561468