0

我有以下简单的代码:

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,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Messaging.MessageQueue”。

在(包装器托管到本机) System.MonoType:GetMethodsByName (string,System.Reflection.BindingFlags,bool,System.Type)

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

在 Mono.CSharp.MemberCache.AddMethods (BindingFlags bf, System.Type 类型) [0x00000] in :0

在 Mono.CSharp.MemberCache.AddMethods (System.Type 类型) [0x00000] in :0

在 Mono.CSharp.MemberCache..ctor (IMemberContainer 容器) [0x00000] in :0

在 Mono.CSharp.TypeHandle..ctor (System.Type 类型) [0x00000] in :0

在 Mono.CSharp.TypeHandle.GetTypeHandle (System.Type t) [0x00000] in :0

在 Mono.CSharp.TypeHandle.GetMemberCache (System.Type t) [0x00000] in :0

在 Mono.CSharp.TypeManager.MemberLookup_FindMembers (System.Type t, MemberTypes mt, BindingFlags bf, System.String name, System.Boolean& used_cache) [0x00000] in :0

在 Mono.CSharp.TypeManager.RealMemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList most_match) [0x00000] in :0

在 Mono.CSharp.TypeManager.MemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList most_match) [0x00000] in :0

什么可能导致这种情况,我该如何解决?

4

1 回答 1

1

Unity 不与 Mono 共享资源,因此即使 Mono 可以访问某个库,这并不意味着 Unity 也可以访问它。Unity 努力使您的项目尽可能轻巧,因此您需要手动将所需的 dll 添加到您的项目中。

其中一种方法应该适合您:

方式 1: 将特定库添加到您的 Unity3d 项目

第 1 步:在项目的 assets 文件夹中创建一个“Plugins”文件夹。

第 2 步:将所需的缺少的库 (.dll) 从其文件夹中复制: unity\Unity\Editor\Data\MonoBleedingEdge\lib\mono\2.0 的路径到您在第 1 步中创建的文件夹

*另请注意,以这种方式可以添加一些 .NET 3.5 及更高版本的功能(我已成功将其与 System.Xml.Linq.dll 和 System.Linq.dll 一起使用)

方式 2: 向 Unity 添加更大的 Mono 支持的 2.0 库子集:

我不确定这是否适用于您提到的特定库,但为了完整起见,我添加了它

第 1 步:菜单 > 编辑 > 项目设置 > 播放器

第 2 步:在出现的检查器窗口中打开“其他设置”

第 3 步:在“优化”标签下,将“Api Compatibility Level”从“.NET 2.0 子集”更改为“.NET 2.0”

*请注意,这仍然不支持所有 Mono 2.0 - 但其中更大的子集。

希望这些帮助

于 2013-07-09T09:22:36.590 回答