1

概括:

我正在尝试在 Mono 环境中手动加载程序集并在 Mac 上获取 BadImageFormatException,但它在 Windows 上运行良好。由于 Mono 在另一个应用程序中运行,因此我无法在启用调试的情况下从命令行运行该应用程序以获得更好的日志记录。

细节:

我用 C# 为 Unity3D 编辑器编写了一些插件。他们已经为 Mac 和 Windows 工作了一年多。我现在正试图通过在第一次从另一个目录(位于 PATH 变量中)调用我的类时手动加载它们来改变我的插件从 Unity 的默认“插件”目录加载的方式。在 Windows 上,我只需调用 Assembly.LoadFile 即可,一切正常。在 Mac 上,我收到 BadImageFormatException 错误。我认为这可能与 Mac 上的插件是一个捆绑包有关。

我试过了:

Assmebly.LoadFile("MyPlugin")
Assmebly.LoadFile("MyPlugin.bundle")
Assmebly.LoadFile("MyPlugin.bundle/Contents/MacOS/MyPlugin")

第一个(只是文件名)返回 FileNotFoundException。另外两个返回 BadImageFormatException 让我认为它找到了它,但还有其他问题。

有没有办法获得更多关于出了什么问题的信息?异常的 FusionLog 成员为 NULL,因为它在 Mac 上,我只收到基本消息。

我的插件是否需要在 Mac 上以不同方式构建才能像这样手动加载?

谢谢,布雷特

4

1 回答 1

1

Assembly.LoadFile 采用 .NET 程序集的路径。

这意味着这MyPlugin.bundle不起作用,因为它是一个目录。

关于最后一个选项,该文件(假设它是一个文件而不是一个目录)需要是一个 .NET 程序集 - 检查是否是这种情况的一种方法是file从终端窗口运行该工具:

$ file MyPlugin.bundle/Contents/MacOS/MyPlugin

它应该响应如下:

MyPlugin: PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit Mono/.Net assembly

然而,我的猜测是它不是 .NET 程序集,而是本机 (OSX) 二进制文件(除其他外,因为 .NET 程序集通常具有 .dll 扩展名)。

于 2013-10-28T11:05:31.423 回答