要点:
我正在尝试在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上以不同方式构建才能手动加载?
谢谢, 布雷特
答案 0 :(得分: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扩展名)。