我有以下简单的代码:
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的'System.Messaging.MessageQueue', Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。
at(wrapper managed-to-native)System.MonoType:GetMethodsByName (字符串,System.Reflection.BindingFlags,布尔,System.Type的)
在System.MonoType.GetMethods(BindingFlags bindingAttr)[0x00000] in:0
at Mono.CSharp.MemberCache.AddMethods(BindingFlags bf,System.Type type)[0x00000] in:0
at Mono.CSharp.MemberCache.AddMethods(System.Type type)[0x00000] in:0
在Mono.CSharp.MemberCache..ctor(IMemberContainer容器) [0x00000] in:0
在Mono.CSharp.TypeHandle..ctor(System.Type类型)[0x00000]中 :0
at Mono.CSharp.TypeHandle.GetTypeHandle(System.Type t)[0x00000] in :0
at Mono.CSharp.TypeHandle.GetMemberCache(System.Type t)[0x00000] in:0
at Mono.CSharp.TypeManager.MemberLookup_FindMembers(System.Type t, MemberTypes mt,BindingFlags bf,System.String name,System.Boolean& used_cache)[0x00000] in:0
at 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 almost_match)[0x00000] in:0
at 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 almost_match)[0x00000] in:0
可能导致此问题的原因以及如何解决?
答案 0 :(得分:1)
Unity不与Mono共享资源,因此即使Mono可以访问库,也不意味着Unity也可以访问它。 Unity努力使您的项目尽可能轻松,因此您需要手动将所需的dll添加到项目中。
其中一种方式适合您:
方式1: 将特定库添加到Unity3d项目
步骤1:在项目的assets文件夹中创建“Plugins”文件夹。
步骤2:从其文件夹中复制所需的缺失库(.dll): 统一路径\ Unity \ Editor \ Data \ MonoBleedingEdge \ lib \ mono \ 2.0 到您在步骤1中创建的文件夹
*另请注意,通过这种方式可以添加一些.NET 3.5及更高版本的功能(我已经成功使用了System.Xml.Linq.dll和System.Linq.dll)
方式2: 将更大的Mono支持的2.0库子集添加到Unity:
我不确定这是否适用于您提到的特定图书馆,但为了完整起见我已添加它
步骤1:菜单>编辑>项目设置>播放器
步骤2:在显示的检查器窗口中打开“其他设置”
步骤3:在“优化”标签下,将“Api兼容级别”从“.NET 2.0子集”更改为“.NET 2.0”
*请注意,这仍然不支持所有Mono 2.0 - 但是更大的一部分。
希望这些帮助