【发布时间】:2012-10-21 12:15:38
【问题描述】:
将 jabber-net dll 从 here 导入我的项目并运行后
using UnityEngine;
using System.Collections;
using jabber;
using jabber.client;
using jabber.connection;
public class XMPP : MonoBehaviour {
jabber.client.JabberClient jC;
// Use this for initialization
void Start () {
jC = new JabberClient();
}
}
Unity 抱怨:
内部编译器错误。有关更多信息,请参阅控制台日志。输出是: 未处理的异常:System.TypeLoadException:无法从程序集“jabber-net,Version=2.1.0.710,Culture=neutral,PublicKeyToken=924c5b18328d6f09”加载类型“jabber.connection.XmppStream”。
我读到其他人(极少数人)已经设法将 jabber-net 与他们的 Unity 代码集成。任何人都可以阐明如何做到这一点或将我指向一个替代图书馆吗?我非常希望能够在我的项目中使用 XMPP。
谢谢
编辑
感谢 @Calvin 提供有用的回复并帮助我深入研究问题。
解决步骤:
- 剥离 System.Drawing 和 System.Windows.Form 后在 monodevelop 中编译 dll(将构建目标更改为库而不是可执行文件)
- 导入 Plugins 文件夹中的 dll(不是随机文件夹)
- 将 Unity 构建目标更改为 Net 2.0(不是 Net 2.0 子集)并指示它剥离字节码
- 删除 SystemAssemblies 文件夹以强制重新编译
事后分析
而且……这种方法似乎最终会失败。编译到 ios 似乎用 ExecutionEngineException: Attempting to JIT compile method '(wrapper managed-to-native) System.Threading.Interlocked:CompareExchange (jabber.protocol.ProtocolHandler&,jabber.protocol.ProtocolHandler,jabber.protocol. ProtocolHandler)' 使用 --aot-only 运行时。
【问题讨论】:
-
出于好奇,您使用的是 Mono DLL 吗?我相信 Unity 是基于 Mono 而不是 Microsoft .NET 框架。
-
是的,我正在使用 Mono DLL。
-
jabber-net 网站没有说明它支持哪些版本的 .Net。您可能需要在 MonoDevelop 中从源代码编译它,看看是否有针对 .Net 2.0 的构建选项。
-
我使用 gmcs 构建了它,它应该针对 .Net 2.0。这是不正确的吗?