2010-12-10 30 views
23

Tengo este dll que creé hace mucho tiempo y lo uso para conectarme al DB de un software específico para el que desarrollo. No he tenido problemas durante más de 4 años e innumerables aplicaciones con este dll.No se pudo cargar el archivo o ensamblado '***. Dll' o una de sus dependencias

Tratando de implementar mi última creación, me sale el siguiente error:

System.IO.FileNotFoundException: Could not load file or assembly '***.dll' or one of its dependencies. The specified module could not be found. 

Así, para cada DLL que he escrito, siempre presentó una solicitud formas simples para probar que dll por sí mismo. Ejecutar esa aplicación simple produjo el mismo error. El dll no carga ni usa nada más que: System, System.Data, System.XML. Entonces, en cuanto a las dependencias de esto, no veo nada malo.

Por cierto, todo funciona en una estación de desarrollo. El problema está limitado a las estaciones de implementación. .Net y los redistribuibles necesarios, ya que hago todo en C++, están desplegados y funcionando.

Ejecutar FUSLOGVW.exe mostró que todo funcionaba bien.

Running depende de .exe dijo: Advertencia: Al menos un módulo tiene una importación no resuelta debido a una función de exportación faltante en un módulo dependiente de carga de retraso.

Ya intenté reescribir todo. Lo cual arrojó los mismos resultados.

¿Alguna pista?

EDITS

Aquí está el mensaje de error total:

See the end of this message for details on invoking \" 
just-in-time (JIT) debugging instead of this dialog box.\" 

************** Exception Text **************\" 
System.IO.FileNotFoundException: Could not load file or assembly 'connectionTo.dll' or one of its dependencies. The specified module could not be found.\" 
File name: 'connectionToJobboss32.dll'\" 
    at TESTConnection.Form1.button1_Click(Object sender, EventArgs e)\" 
    at System.Windows.Forms.Control.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)\" 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)\" 
    at System.Windows.Forms.Control.WndProc(Message& m)\" 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)\" 
    at System.Windows.Forms.Button.WndProc(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)\" 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)\" 
\" 



************** Loaded Assemblies **************\" 
mscorlib\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)\" 
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll\" 
----------------------------------------\" 
TESTConnection\" 
    Assembly Version: 1.0.3996.18980\" 
    Win32 Version: \" 
    CodeBase: file:///C:/Program%20Files%20(x86)/conn/TESTConnection.exe\" 
----------------------------------------\" 
System.Windows.Forms\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll\" 
----------------------------------------\" 
System.Drawing\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll\" 
----------------------------------------\" 
System\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll\" 
----------------------------------------\" 

No hay ningún error en el visor de eventos.

Respuesta

18

Tuve el mismo problema con un dll de ayer y todo lo que hace referencia es System, System.Data y System.Xml. Resulta que la configuración de compilación para el tipo de plataforma no se alineó. El dll fue desarrollado para x86 y el programa que lo usó fue "Cualquier CPU" y como estoy ejecutando una máquina x64, ejecutó el programa como x64 y tuvo problemas con la x86 dll. No sé si este es su problema o no, solo pensé que lo mencionaría como algo más que comprobar.

+0

Desde que escribí en Managed C++, "Any CPU" no existe. Comprobé el administrador de configuración de todos modos y ambos, dll y aplicación, están configurados para Win32. Como estoy compilando esto en 32 bits, lo estaba ejecutando desde mi carpeta Archivos de programa (x86) para evitar problemas con 64 bits. ... Así que había estado investigando esto, pero no vi nada malo. Oh, y una de las estaciones en las que intento implementar es de todos modos una máquina de 32 bits. –

+0

Tuve un problema similar. Leí su respuesta y no pude cambiarla con la interfaz de VS. Así que abrí el archivo de proyecto en el editor de texto y lo cambio a AnyCPU manualmente, y funciona.Incluso la interfaz VS valor aceptado como debería en primer lugar. –

4

Me encontré con esto recientemente. Resultó que la DLL anterior se compiló con una versión anterior (Visual Studio 2008) y hacía referencia a esa versión de las bibliotecas dinámicas de tiempo de ejecución. Intentaba ejecutarlo en un sistema que solo tenía .NET 4.0 y nunca había instalado ninguna biblioteca dinámica en tiempo de ejecución. ¿La solución? Recompuse la DLL para vincular las bibliotecas de tiempo de ejecución estáticas.

Compruebe el registro de errores de la aplicación en el Visor de eventos (EVENTVWR.EXE). Le dará más información sobre el error y probablemente le indique la verdadera causa del problema.

+0

Miré el visor de eventos y publiqué el mensaje de error que recibí por completo. No se muestra nada en el visor de eventos. –

+1

Dice que funciona en la máquina de desarrollo pero no en la máquina de despliegue. ¿Está implementando una versión de depuración de la DLL y no tiene las bibliotecas de depuración en la máquina de despliegue? ¿Hay alguna otra versión de connectionTo.dll o connectionToJobboss32.dll en algún lugar de la ruta de búsqueda? –

+0

Intenté ambas versiones de depuración y lanzamiento. Todo con los mismos errores. Solía ​​obtener el error faltante MSVCR100.dll. ¿Cuál es la biblioteca redistribuible para aplicaciones creadas con MS VC++, pero ahora la copio junto con la aplicación? También lo reemplazo con MSVCR100d.dll al copiar la versión de depuración. –

30

or one of its dependencies

Ese es el problema de costumbre, no se puede ver un archivo DLL no administrado que falta con Fuslogvw.exe. Lo mejor que se puede hacer es ejecutar la utilidad ProcMon de SysInternals. Lo verá buscando la DLL y no la encontrará. Modo de perfil en Dependencia Walker puede mostrarlo también.

+1

¿Podría indicarnos qué buscar en el registro de ProcMon o incluso en Dependency Walker? Honestamente, no veo nada más que éxitos en ambas utilidades. En ProcMon veo algunos 'Archivo no encontrado', pero son seguidos inmediatamente por una búsqueda del mismo archivo en otra ruta y se encontraron con éxito. –

+0

Estás viendo lo correcto afaict. Decepcionante, esa es una manera segura de verlo. No tengo idea, más allá de ahogarme en los datos. Puede guardar la traza y ponerla en un servicio de intercambio de archivos si desea tener otra vista puesta en ella. –

+1

Configurar el campo 'Working Directory' en la configuración del proyecto .NET (pestaña' Debug') en el directorio con todas las DLL de las que dependía mi programa me solucionó el problema. – MasterMastic

6

Tuve el mismo problema. Para mí, fue causada por la configuración predeterminada en el servidor IIS local en mi máquina.Así que la manera más sencilla de solucionarlo fue utilizar el servidor de desarrollo Visual Studio integrado en su lugar :)

Las versiones más nuevas de IIS en máquinas x64 tienen una configuración que no permite que las aplicaciones de 32 bits se ejecuten de manera predeterminada. Para habilitar las aplicaciones de 32 bits en el IIS local, seleccione el grupo de aplicaciones relevante en el administrador IIS, haga clic en "Configuración avanzada" y cambie "Habilitar aplicaciones de 32 bits" de Falso a Verdadero

2

Esta respuesta no tiene ninguna relación con los OP's situación, y es un escenario muy improbable para cualquier otra persona, pero en caso de que pueda ayudar a alguien ...

En mi caso, recibí "No se pudo cargar el archivo o ensamblado" System.Windows.Forms, Version = 4.0.0.0 ... "porque había desmontado y vuelto a ensamblar el programa con ILDAsm.exe y ILAsm.exe desde .NET Framework/SDK versión 2. Convirtiendo en ILDAsm.exe y ILAsm.exe desde .NET Framework/SDK versión 4 corregido el problema.

(Curiosamente, a pesar de hacer lo que hice puede parecer un error evidente, el archivo EXE resultante que no trabajó indicaron que dirige .Net 4 cuando se examina con JetBrains dotPeek.)

3

Recientemente Para solucionar este problema, la aplicación corre bien en las máquinas de desarrollo y selecciona otras máquinas, pero no en las instaladas recientemente. Resultó que las máquinas en las que sí funcionaban tenían instalado Visual C++ 11 Runtime, mientras que las máquinas recién instaladas no funcionaban. Agregar el Visual C++ 11 Tiempo de ejecución redistribuible para el instalador de aplicación fija el tema ...

+1

Tenga en cuenta que hay 2 versiones del Visual C++ Runtime: 32 y 64 bit. Instale ambos para estar seguro. En mi caso, solo el paquete de 64 bits resolvió el problema. – kDar

0

1) copia de DLL "Externals \ ffmpeg \ bin" en el directorio de salida del proyecto (cuando estancias ejecutables); 2) Asegúrese de que su proyecto esté construido para el objetivo x86 (se ejecuta en modo de 32 bits).

Follow this thread for more

0

Una forma más fácil de determinar qué dependencias una DLL nativo tiene es utilizar Dependency Walker - http://www.dependencywalker.com/

que analiza el archivo DLL nativo y descubrió que dependía de MSVCR120.DLL y MSVCP120.DLL, ninguno de los cuales estaba instalado en mi servidor de transición en el directorio System32. Instalé el tiempo de ejecución C++ en mi servidor de transferencia y el problema se resolvió.

1

que tenían el mismo problema - un .dll trabajando todo el tiempo, entonces mi equipo dañado y después tuve este problema de 'No se pudo cargar el archivo o ensamblado .... DLL'

dos soluciones posibles: cuando el equipo se estrelló puede haber algunos archivos inconsistentes en

C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files 

Eliminación de esa carpeta, recompilar y el error se había ido.

Una vez también tuve que eliminar mi carpeta de paquetes (la había leído en otro lugar). Permita que Visual Studio/Nuget instale los paquetes faltantes (o reinstale manualmente) y luego todo vuelva a funcionar bien.

Cuestiones relacionadas