在Mono中使用预编译的.NET程序集DLL?

Nic*_*win 13 .net c# dll mono assemblies

我们目前正在测试Mono,看看我们的.NET DLL是否适用于Linux上的客户.我们的DLL为Windows窗体提供组件.我将DLL放在Debug目录中,添加了引用,并创建了一个从Windows窗体派生的类.该类运行良好独立,但在我添加了DLL引用并创建了我们的一个组件(intellisense工作正常)后,它编译但不会运行:

** (/home/aldwin/testMonoWF/testMonoWF/bin/Debug/testMonoWF.exe:26905): WARNING **: Could not load file or assembly 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN' or one of its dependencies.

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN' or one of its dependencies.
File name: 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN'

我查看了程序集的属性,它是带有该公钥的版本.

有没有办法让我使用这些DLL?我究竟做错了什么?

编辑:

根据MoMA的说法,除了一些与情况无关的[MonoTodo]之外,其中三个DLL存在一个问题:

Calling Method | P/Invoke Method | P/Invoke Library
void OnHandleCreated (EventArgs) | int GoText/ComboBoxControl.SetWindowTheme (IntPtr, string, string) | uxtheme.dll

但是,我打开了一个用VS2008创建的示例项目,在正确的位置指向DLL的引用,它工作正常.但我无法获得在新项目中工作的参考.难道我做错了什么?

编辑2:为了澄清,我们不想重新创建现有的Windows应用程序 - 我们正在模拟客户使用我们的dll创建一个新的应用程序.我只是测试它是否是一个DLL问题.由于VS制作的应用程序能够找到dll并成功运行,看起来这不是一个DLL问题.新应用程序不会调用VS创建的应用程序所没有的任何内容.

Jon*_*way 9

我用MOMA(Mono Migration Analyzer)测试DLL,看看它是否使用了不支持的API.


mig*_*aza 6

乔纳森所说的是正确的,你需要按照所示的那样运行命令,它会产生大量的信息.

程序集具有强大的名称,因此在Windows上听起来像是在GAC上安装了依赖项.如果"OUR.ASSEMBLY"应该在那里,请运行:

gacutil -i OUR.ASSEMBLY.dll

安装它.可能还有OUR.ASSEMBLY.dll需要的其他依赖项,这是JPobst'命令将显示的内容.

  • 当然,但是您强烈地将该程序命名为汇编,因此Mono将在GAC上查找它.您可以使用"export MONO_PATH = DIR"覆盖它以进行诊断(它将命令Mono在DIR中查找程序集,无论其强名称如何). (2认同)