为什么在Unity中使用system.messaging会导致未处理的异常
本文关键字:未处理 异常 messaging system Unity 为什么 | 更新日期: 2023-09-27 18:21:42
我有以下简单代码:
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",版本=2.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'。
位于(包装管理为本机)System.MonoType:GetMethodsByName(字符串,System.Reflection.BindingFlags,布尔,System.Type)
在System.MonoType.GetMethods(BindingFlags bindingAttr)[0x0000]in:0
在Mono.Sharp.MemberCache.AddMethods(BindingFlags bf,System.Typetype)[0x0000]在:0 中
在Mono.Sharp.MemberCache.AddMethods(System.Type类型)[0x0000]in:0
位于Mono.CSharp.MemberCache.ctor(IMemberContainer容器)[0x0000]在:0 中
在中的Mono.CSharp.TypeHandle.ctor(System.Type类型)[0x0000]处:0
在中的Mono.Sharp.TypeHandle.GetTypeHandle(System.Type t)[0x0000]处:0
位于Mono.Sharp.TypeHandle.GetMemberCache(System.Type t)[0x0000]in:0
在Mono.Sharp.TypeManager.MemberLookup_FindMembers(System.Type t,MemberTypes mt,BindingFlags bf,System.String name,System.Boolean&used_cache)[0x0000]在:0 中
在Mono.Sharp.TypeManager.RealMemberLookup(System.Typeinvocation_type,System.type qualifier_type,System.type queried_type,MemberTypes mt,BindingFlags original_bf,System.String name,IListalmost_match)[00x00000]在:0 中
在Mono.Sharp.TypeManager.MemberLookup(System.Typeinvocation_type,System.type qualifier_type,System.type queried_type,MemberTypes mt,BindingFlags original_bf,System.String name,IListalmost_match)[00x00000]在:0 中
是什么原因导致了这种情况,我该如何解决?
Unity不与Mono共享资源,因此即使Mono可以访问库,也不意味着Unity也可以访问库。Unity努力使您的项目尽可能轻,因此您需要手动将所需的dll添加到项目中。
其中一种方法应该适用于您:
方式1:将特定的库添加到Unity3d项目
步骤1:在项目的assets文件夹中创建一个"Plugins"文件夹。
步骤2:从它们的文件夹中复制所需的丢失库(.dlls):统一路径''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,而是其中的一个子集。
希望这些能帮助