Obtengo System.IO.FileNotFoundException: The specified module could not be found
cuando ejecuto el código C# que llama a un conjunto C++/CLI que a su vez llama a una DLL C pura. Sucede tan pronto como se crea una instancia de un objeto que llama a las funciones C DLL puras.C# a C++/CLI a C DLL System.IO.FileNotFoundException
BackingStore es puro C. CPPDemoViewModel es C++/CLI llamando a BackingStore tiene una referencia a BackingStore.
He intentado el caso más simple posible: agregue un nuevo proyecto de prueba de unidad C# que solo intenta crear un objeto definido en CPPDemoViewModel. Agregué una referencia del proyecto de C# a CPPDemoViewModel.
Un proyecto de prueba C++/CLI funciona bien solo con la referencia agregada a CPPDemoViewModel por lo que es algo sobre ir entre los idiomas.
Estoy usando Visual Studio 2008 SP1 con .Net 3.5 SP1. Estoy trabajando en Vista x64, pero he tenido cuidado de asegurarme de que mi objetivo de plataforma esté configurado en x86.
Esto se siente como algo estúpido y obvio que me falta, pero sería aún más estúpido por mi parte perder el tiempo tratando de resolverlo en privado, así que estoy aquí avergonzándome.
Esta es una prueba para un proyecto que transporta una gran cantidad de código C heredado que guardo en una DLL con un ViewModel implementado en C++/CLI.
editar Después de consultar los directorios, puedo confirmar que el BackingStore.dll no se ha copiado.
Tengo las carpetas de proyectos únicas estándar creadas con una solución típica de múltiples proyectos.
WPFViewModelInCPP BackingStore CPPViewModel CPPViewModelTestInCS bin Debug Debug
El mayor nivel de depuración parece haber una carpeta común utilizado por los proyectos de C y C++/CLI, para mi sorpresa.
WPFViewModelInCPP \ depuración contiene BackingStore.dll, CPPDemoViewModel.dll, CPPViewModelTest.dll y su .ilk asociado y .pdb
WPFViewModelInCPP \ CPPViewModelTestInCS \ bin \ Debug contiene CPPDemoViewModel y CPPViewModelTestInCS .dll y .pdb pero no BackingStore. Sin embargo, la copia manual de BackingStore en ese directorio no solucionó el error.
CPPDemoViewModel tiene la propiedad copia local conjunto que supongo que es responsable de copiar su archivo DLL cuando si se hace referencia. No puedo agregar una referencia de un proyecto de C# a una DLL pura de C, simplemente dice No se pudo agregar una referencia a la Tienda de respaldo.
No estoy seguro de si tengo solo uno o dos problemas.
Puedo usar un paso de compilación copiado a la antigua para copiar BackingStore.dll en los directorios de cualquier proyecto C# dado, aunque esperaba que el nuevo modelo .NET no lo requiriera.
DependencyWalker me dice que el archivo que falta es GPSVC.dll, que has been suggested indica problemas de configuración de seguridad. Sospecho que esto es una pista falsa.
Edit2 Con una copia manual de los BackingStore.dll para ser adyacente al ejecutable, la GUI ahora funciona bien. El Proyecto de Prueba C# todavía tiene problemas que sospecho se deben al entorno de tiempo de ejecución de un proyecto de prueba, pero puedo vivir sin eso por el momento.
Sí, sé que es descarado marcar su propia respuesta como aceptada, pero nadie más se acercó a la respuesta real para las pruebas, lo que demoró una buena hora de excavación. Todavía estoy aturdido, tengo que usar una técnica tan anticuada para copiar el archivo DLL. –
Andy, todavía deberías verificar el punto que he planteado, tengo la sensación de que tienes suerte con el orden/momento de inicialización, y puede que no tenga suerte en el futuro sin un control firme sobre este. – RandomNickName42