Actualmente estamos probando Mono para ver si nuestras DLL .NET funcionarán para los clientes en Linux. Nuestros archivos DLL proporcionan componentes para Windows Forms. Coloqué los archivos DLL en el directorio Debug, agregué las referencias y creé una clase derivada de un Windows Form. La clase había funcionado bien independiente, pero después he añadido las referencias DLL y ha creado uno de nuestros componentes (el intellisense funcionaba bien), que compila pero no se ejecutará:¿Cómo usar DLL de ensamblado .NET precompilado en Mono?
** (/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'
Miré a las propiedades de la asamblea, y es esa versión con esa clave pública.
¿Hay alguna manera de utilizar estos archivos DLL? ¿Qué estoy haciendo mal?
EDIT:
Según el MoMA, aparte de algunos s [MonoTodo] que no tienen ninguna relación con la situación, hay un problema en tres de las DLL:
Calling Method | P/Invoke Method | P/Invoke Library void OnHandleCreated (EventArgs) | int GoText/ComboBoxControl.SetWindowTheme (IntPtr, string, string) | uxtheme.dll
Sin embargo, he abierto uno de nuestros proyectos de ejemplo creados con VS2008, apuntó la referencia a la DLL en el lugar correcto, y funcionó bien. Pero no pude obtener la referencia para trabajar en un nuevo proyecto. ¿Estoy haciendo algo mal?
EDIT 2: Para aclarar, no queremos volver a crear una aplicación de Windows existente: simulamos que un cliente está creando una nueva aplicación con nuestro dll. Estaba probando eso para ver si era un problema de dll. Dado que la aplicación VS-made fue capaz de encontrar el dll y ejecutar con éxito, parece que no es un problema de DLL. La nueva aplicación no llama a nada de lo que no hace la aplicación creada por VS.
Acabo de agregar los detalles de MoMA arriba. Sin embargo, funciona bien con la aplicación de muestra. Simplemente no con la nueva aplicación creada con MonoDevelop. – NickAldwin
No necesita (no debería) volver a crear la aplicación en MonoDevelop. Mono debería ser capaz de ejecutar DLL compilados en Visual Studio. Me gustaría ver esa llamada ComboBoxControl.SetWindowsTheme - que está haciendo la llamada p/invoke, lo que significa que no será compatible con Mono. ¿Puedes eliminarlo o no usar ese control? –
No queremos recrearlo: simulamos que un cliente está creando una nueva aplicación con nuestro dll. Estaba probando eso para ver si era un problema de dll. Dado que la aplicación VS-made fue capaz de encontrar el dll y ejecutar con éxito, parece que no es un problema de DLL. La nueva aplicación no llama a nada de lo que no hace la aplicación creada por VS. – NickAldwin