No se pudo cargar el archivo o ensamblado o una de sus dependencias

238

Tengo otro de estos problemas "No se pudo cargar el archivo o el ensamblado o una de sus dependencias".

Información adicional: No se pudo cargar el archivo o ensamblado 'Microsoft.Practices.Unity, Version = 1.2.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)

No tengo idea de qué está causando esto o cómo podría depurarlo para encontrar la causa.

He realizado una búsqueda en mis catálogos de soluciones .csproj, y en todos los lugares donde tengo Unity tengo:

Referencia Incluir = "Microsoft.Practices.Unity, Version = 2.0.414.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"

No puedo encontrar ninguna referencia en ningún lugar que vaya en contra de 1.2.0.0 en ninguno de mis proyectos.

¿Alguna idea de cómo debo resolver esto?

También agradecería consejos sobre cómo depurar problemas como este en general.

ronag
fuente
1
¿Podría alguno de sus ensambles a los que se hace referencia usar algunas cosas en una Unitybiblioteca antigua ?
Decyclone
3
Probablemente ... pero ¿cómo puedo encontrar qué ensamblajes? Tengo muchos proyectos en mi solución y muchos sospechosos potenciales ... la fuerza bruta de prueba y error parece un poco inútil ...
Ronag
3
No es la referencia de ensamblaje, hace referencia a la versión 2.0. Pero en tiempo de ejecución, el CLR está encontrando 1.2, una versión antigua. Si no ve esa DLL antigua en su directorio de compilación, use Fuslogvw.exe para descubrir cómo el CLR encontró esta copia antigua.
Hans Passant
2
Mire la carpeta bin de su proyecto y vea si el dll de su proyecto tiene un conflicto en su nombre. Simplemente elimine ese y luego Reconstruya su solución. Eso funcionó para mí.
coggicc
11
"o una de sus dependencias" es la parte que realmente me molesta. Si no puede cargar "una de sus dependencias", el error debería indicar qué "una de sus dependencias" no se puede cargar. La forma actual es inútil, también podría decir que no puede cargar cositas
Paul McCarthy

Respuestas:

116
  1. Compruebe si está haciendo referencia a un ensamblado que a su vez hace referencia a una versión anterior de la unidad. Por ejemplo, supongamos que tiene un ensamblado llamado ServiceLocator.dllque necesita una versión anterior del ensamblado de Unity, ahora cuando hace referencia al ServiceLocatordebe proporcionarle la versión anterior de Unity, y eso causa el problema.

  2. Puede ser la carpeta de salida donde todos los proyectos compilan sus ensamblados, tiene una versión antigua de la unidad.

Puede usar FusLogVw para averiguar quién está cargando los ensamblajes antiguos, simplemente defina una ruta para el registro y ejecute su solución, luego verifique (en FusLogvw) la primera línea donde se carga el ensamblaje de Unity, haga doble clic y vea la llamada asamblea, y aquí tienes.

Nour Sabouny
fuente
66
¿Dónde está el archivo de registro de FuseLogVw
Stiger
1
Para evitar tener que encontrar el archivo de registro, puede especificar una ruta de registro personalizada: Configuración, marque la casilla de verificación Habilitar ruta de registro personalizada, ingrese una ruta de registro personalizada, actualice.
RedGreenCode
82

Abra el administrador de IIS

Seleccionar grupos de aplicaciones

luego seleccione el grupo que está utilizando

ir a la configuración avanzada (en el lado derecho)

Cambie el indicador de Habilitar aplicación de 32 bits falso a verdadero.

kranthi
fuente
IIS -> seleccione cada grupo de aplicaciones -> Configuración básica -> verifique si el último marco está seleccionado en el menú desplegable ".NET Framework version"
Martin
También puede hacer clic derecho en su proyecto en VS. y elimine la marca de verificación de 32 bits
preferida
Gracias. Funcionó. Bueno, ya era cierto en mi caso, solo por intentarlo. Lo hice falso y funcionó.
meekash55
Cuando fusioné un proyecto de 1 servidor a otro, esta bandera fue falsa nuevamente, ¡gracias por la solución!
Appsum Solutions el
69

Para mí, ninguna de las otras soluciones funcionó (incluida la estrategia de limpieza / reconstrucción). Encontré otra solución alternativa que es cerrar y volver a abrir Visual Studio .

Supongo que esto obliga a Visual Studio a volver a cargar la solución y todos los proyectos, volviendo a verificar las dependencias en el proceso.

Robotnik
fuente
33
Si no crees que esto funcionará, al menos inténtalo. No podía creerlo hasta que lo hice.
Ben Cull
3
😍😍😍😍😍😍😍😍😍😍😍 Trabajó para mí
Devidas M Das
48

Intente limpiar las carpetas Debug and Release en su solución. Luego quite y agregue la unidad nuevamente.

Aleksei Anufriev
fuente
3
Este problema puede ser causado por muchas cosas ... su solución resolvió mis problemas y podría resolver los de otros también.
Scott Rippey
1
@ScottRippey Esto funcionó para mí. Primero eliminé todos los archivos .pdb y luego volví a cargar mi proyecto y lo reconstruí.
botenvouwer
21

¡Al 99%, el problema No se pudo cargar el archivo o el ensamblaje o una de sus dependencias es causada por dependencias! Te sugiero que sigas estos pasos:

  1. Descargue Dependency Walker de http://www.dependencywalker.com/

  2. Inicie Dependency Walker y abra el dll (en mi caso NativeInterfaces.dll)

  3. Puede ver una o más dll con el error en rojo Error al abrir el archivo ...

  4. Significa que este dll falta en su sistema; en mi caso el nombre dll esMSVCR71.DLL

  5. Puede descargar dll faltantes de google y copiar en la ruta correcta (en mi caso c:\windows\system32)

  6. En este punto, debe registrar la nueva dll en el GAC (Global Assembly Cache): abra una terminal DOS y escriba:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. ¡Reinicia tu aplicación!

Stefano Lonati
fuente
22
Dependency Walker es genial, pero copiar DLL aleatorias de Internet a Windows es ... menos genial. Es mejor tratar de encontrar el instalador que proporciona esos dlls.
RJFalconer
Obtuve algunos archivos ( API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL) no encontrados y me llevó a esta pregunta de stackoverflow . Básicamente, tenga en cuenta que podría estar mirando falso positivo para algunos archivos, el enlace proporciona más detalles.
cheriejw
16

Microsoft Enterprise Library (referenciado por .NetTiers) fue nuestro problema, que a su vez hacía referencia a una versión anterior de Unity. Para resolver el problema, utilizamos la siguiente redirección de enlace en web.config:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Alternativamente, es posible que desee actualizar la Biblioteca Enterprise a la última versión.

Rebecca
fuente
16

Lo siguiente funcionó para mí.

  • Eliminar archivos temporales C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales ASP.NET
  • Cerrar VSTS y abrir de nuevo
  • Eliminar y agregar las mismas DLL (Nota: agrega las mismas versiones coincidentes)
Riddhi M.
fuente
15

Verifique el archivo Web.config / App.config en su proyecto. Vea si los números de versión son correctos.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

Esto funcionó para mí.

Jaseem Abbas
fuente
2
Esto funcionó para mí, aunque era web.config, no app.config
samneric
15

A pesar de que la pregunta original se publicó hace cinco años, el problema aún persiste y es bastante molesto.

La solución general es un análisis exhaustivo de todos los ensambles a los que se hace referencia para comprender qué está sucediendo mal. Para facilitar esta tarea me hizo una herramienta (una extensión de Visual Studio) que permite la selección de un ensamblaje .NET (una .dllo .exearchivo) para obtener una gráfica de todos los ensamblados de referencia además de destacar en conflicto o que falten referencias.

La herramienta está disponible en Visual Studio Gallery: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

Ejemplo de salida: ingrese la descripción de la imagen aquí

marss19
fuente
No funciona con las ediciones comunitarias de Visual Studio
Draex_
Creo que debería haber otro problema, no relacionado con la edición de Visual Studio. Probé la extensión en las ediciones de la comunidad VS 2017 y VS 2015. En realidad, se desarrolló mediante la edición comunitaria VS 2017.
marss19
Ajá. ¿Tienes alguna otra extensión instalada? Esta página dice que DGML no es compatible con VS Community: msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_
1
No hay herramientas de arquitectura en la edición comunitaria, pero el editor DGML está disponible. Puede instalarlo seleccionando "Instalar editor DGML" en "Componentes individuales" -> "Herramientas de código" a través del instalador de Visual Studio -> Modificar
marss19
11

captura de pantallaEn el explorador de soluciones, haga clic con el botón derecho en el proyecto (no en la solución), en la pestaña de compilación, seleccione Objetivo de plataforma: "Cualquier CPU".

Engin Aydogdu
fuente
Después de verificar el grupo de aplicaciones, "Habilitar aplicaciones de 32 bits" se configuró en False, pero el objetivo de mi plataforma era x86. Cambiarlo a cualquier CPU o x64 solucionó mi problema.
Keith Ketterer
11

La respuesta de Juntos es correcta, pero también debe considerar:

Para la unidad v2.1.505.2 se especifican diferentes atributos AssemblyVersion y AssemblyFileVersion :

ingrese la descripción de la imagen aquí

AssemblyFileVersion es utilizado por NuGet, pero a CLR no le importa. ¡CLR usará solo AssemblyVersion !

Por lo tanto, sus redireccionamientos deben aplicarse a una versión que se especifique en el atributo AssemblyVersion . Entonces 2.1.505.0 debería ser usado

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

Consulte también: ¿Cuáles son las diferencias entre AssemblyVersion, AssemblyFileVersion y AssemblyInformationalVersion?

Ievgen Naida
fuente
6

También recibí este terrible error y encontré una solución para esto ...

  1. Haga clic derecho en el nombre de la solución
  2. Haga clic en Solución limpia
  3. Reiniciar Visual Studio
  4. Ir a proyecto Propiedades >> Construir
  5. Cambiar configuración para liberar
  6. Iniciar depuración (F5)

1), 2)

Haga clic derecho en el nombre de la solución

4), 5)

Cambiar configuración para liberar

Espero que esto te ayude también.

Roshana Pitigala
fuente
5
  • Ir a: Solución -> Paquete
  • Haga clic en la pestaña Avanzado (Buscar debajo de la página)
  • Agregue su dll a ensamblajes adicionales (de esta manera podemos agregar dlls externos en sharepoint).
Vijay Singh
fuente
77
No tengo "Solución -> Paquete" en mi proyecto
VS2010
5

No estoy seguro si esto podría ayudar.

Compruebe que el nombre del ensamblado y el espacio de nombres predeterminado en las propiedades de sus conjuntos coinciden. Esto resolvió mi problema que produjo el mismo error.

Sjaan
fuente
¡Excelente! Mi nombre de archivo dll y el espacio de nombres eran diferentes, copié el espacio de nombres y cambié el nombre de mi dll.
Anynomous Khan
5

En mi caso, en la carpeta bin había un dll sin referencia llamado Unity.MVC3, intenté buscar cualquier referencia a esto en Visual Studio sin éxito, por lo que mi solución fue tan fácil como eliminar ese dll de la carpeta bin.

Totodilo
fuente
4

Gracias Riddhi M. Siguiendo trabajó para mí.

Eliminar archivos temporales C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales de ASP.NET Cerrar VSTS y abrir de nuevo Eliminar y agregar las mismas DLL (Nota: agrega las mismas versiones coincidentes)

Sridhar Kommana
fuente
Pasé tanto tiempo en esto y no puedo creer que esta fuera la respuesta. Por lo general, es una buena solución cuando ves algún comportamiento extraño dentro de VS. Gracias.
Bonez024
3

Dices que tienes muchos proyectos en tu solución ... bueno, comienza con uno cerca de la parte superior del orden de compilación. Obtenga ese para construir y una vez que lo descubra, puede aplicar la misma solución al resto de ellos.

Honestamente, probablemente solo necesite actualizar su referencia. Parece que actualizaste tu versión y no actualizaste las referencias, o es un problema relativo de ruta si mantienes tu solución en control de código fuente. Simplemente verifique sus suposiciones y vuelva a agregar la referencia.

Joel Martinez
fuente
3

Lo siguiente funcionó para mí.

  • Eliminar archivos temporales C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales ASP.NET
    • luego haga clic derecho en Archivos temporales de Asp.net> propiedades> seguridad y otorgue acceso de control total a IIS y a todos los usuarios que ejecutan mi proyecto
sólo yo
fuente
3

Este problema me ocurrió cuando una de mis bibliotecas dependientes estaba compilando una DLL con "Cualquier CPU" cuando la biblioteca principal esperaba una compilación de "x64".

Creamstout10
fuente
3

Tuve el mismo problema que lo resolví a través de las siguientes instrucciones:

  1. abrir el menú de herramientas y seleccionar la opción
  2. en opciones, ventana vaya a Proyectos y soluciones / Proyectos web
  3. cheque use the 64bit version of IIS ...

ingrese la descripción de la imagen aquí

mohammad almasi
fuente
2

Tiene que eliminar su archivo appname.dll de su carpeta de salida. Limpieza de depuración y liberación de carpetas. Reconstruir y copiar en el archivo dll regenerado de la carpeta de salida.

gucci
fuente
2

I "Establecer como proyecto de inicio" la biblioteca / proyecto descargado / no encontrado.

Luego lo desplegó.

¡Funcionó!

Creo que no pudo encontrar el .dll porque al principio no estaba en el ensamblado.

nirav
fuente
2

Otra posible causa: asegúrese de no haber dado accidentalmente a ambos proyectos el mismo nombre de ensamblaje en las propiedades del proyecto.

nathanchere
fuente
Esto me llevó horas descubrir ... Accidentalmente llamé a mi proyecto de prueba de unidad el mismo nombre que el proyecto principal, por lo que el dll del proyecto de prueba de unidad debe haber estado sobrescribiendo el dll del proyecto
Iannazzi
2

Mi solución para .NET 4.0, usando Enterprise Library 5, fue agregar una referencia a:

Microsoft.Practices.Unity.Interception.dll

MacGyver
fuente
2

Esté atento a las referencias en conflicto. Incluso después de una limpieza y reconstrucción, las referencias en conflicto seguirán causando un problema. Mi problema fue entre AForge y Accord. Eliminé ambas referencias y volví a agregar las referencias, volviendo a elegir la referencia particular (particular para mi caso, solo Accord).

usuario3791372
fuente
2

Para mí, la reconstrucción del juego de la unidad sin Unity C # Proects Checkmark funcionó.

Rudra orante
fuente
2

En mi caso, ninguna de las respuestas propuestas funcionó.

Esto es lo que funcionó para mí:

  1. Eliminar la referencia
  2. Cambiar el nombre de la DLL
  3. Importar la referencia nuevamente

El segundo paso fue aparentemente importante ya que no funcionó sin él.

Nicolas Raoul
fuente
2

Intente comprobar si la propiedad "Copiar a local" para la referencia está establecida en verdadero y la versión específica está establecida en verdadero. Esto es relevante para aplicaciones en Visual Studio.

Srinivas Somasundaram
fuente
2

Tuve esto hoy, y en mi caso el problema fue muy extraño:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

Tenga en cuenta los caracteres extraviados al final del XML: de alguna manera, se han movido del número de versión al final de este bloque de XML.

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

Cambiado a lo anterior y listo! Todo funcionó de nuevo.

Garryp
fuente
1

Si recibe este mensaje de error al abrir una aplicación en Windows XP, significa que primero ha instalado esa aplicación debido a que no funciona sin Net Framework 4 y Service Pack 3. instaló ambos y nuevamente está recibiendo este error, por lo que debe reinstalar esa aplicación nuevamente pero primero desinstalarla de Agregar y quitar

Si esto no funciona, por favor no abuses de mí. yo también soy un junior

basit durrani
fuente