2013-07-08 39 views
0

我有以下簡單的代碼:爲什麼在Unity中使用system.messaging會導致未處理的異常?

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, Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。

在(包裝管理到本機)System.MonoType:GetMethodsByName (字符串,System.Reflection.BindingFlags,布爾,System.Type的)

在System.MonoType.GetMethods(的BindingFlags bindingAttr)[0x00000 ] 在:0

在Mono.CSharp.MemberCache.AddMethods(的BindingFlags BF,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

在Mono.CSharp.TypeHandle.GetMemberCache(System.Type的噸)[0x00000] 在:0

在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

在單聲道中構建好,但在統一中出現錯誤。 – user2561468

+0

代碼太簡單了, 使用UnityEngine;使用系統的 ;使用System.Messaging的 ;使用System.IO的 ; 使用RabbitMQ; 使用Mono.Messaging; using Mono.Messaging.RabbitMQ; 命名空間NB.src.ui { \t公共類NBMessage \t \t {\t \t \t公共無效的init() \t \t { \t \t \t消息MSG =新的Message(); //建立通 \t \t \t \t \t \t if(!MessageQueue.Exists(「。\\ myQueue」))// error \t \t \t { \t \t \t \t MessageQueue.Create(「。\\ myQueue」); \t \t \t} \t \t} – user2561468

回答

1

Unity不會與Mono共享資源,因此即使Mono可以訪問庫,也不表示Unity可以訪問它。 Unity努力讓您的項目儘可能輕鬆,所以您需要手動將所需的dll添加到您的項目中。

途徑之一應該爲你工作:

方法1: 添加特定庫到您的Unity3d項目

第1步:在項目中創建的資產文件夾中的「Plugins」文件夾。

步驟2:複製缺少的庫(.DLL文件),你從他們的文件夾想: 路徑團結\團結\編輯\ DATA \ MonoBleedingEdge \ LIB \單聲道\ 2.0 你在步驟1中

創建的文件夾

*另外請注意,以這樣的方式,可以增加一些.NET 3.5及以上功能

路2(我已經成功地與System.Xml.Linq.dll和System.Linq.dll用它) : 將單聲道支持2.0庫的較大子集添加到Unity:

我不知道這是否會爲你提到的具體圖書館工作,但我已經添加了它完整起見

步驟1:菜單>編輯>項目設置>播放器

第2步:在出現打開的「其他設置」

步驟3巡視窗口:在「優化」標籤,在「API兼容性級別」,從「.NET 2.0子集」更改爲」 .NET 2.0"

*請注意,這仍然不支持所有Mono 2.0 - 但是這些更大的子集。

希望這些幫助

+0

o,我的上帝,沒關係,非常感謝。 – user2561468

相關問題