2008-10-18 75 views
556

estoy tratando de hacer algunas pruebas unitarias en C# aplicación de Windows Forms (Visual Studio 2005), y me sale el siguiente error:definición de manifiesto del ensamblado ubicado no coincide con referencia al ensamblado

System.IO.FileLoadException: Could not load file or assembly 'Utility, Version=1.2.0.200, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)**

at x.Foo.FooGO()

at x.Foo.Foo2(String groupName_) in Foo.cs:line 123

at x.Foo.UnitTests.FooTests.TestFoo() in FooTests.cs:line 98**

System.IO.FileLoadException: Could not load file or assembly 'Utility, Version=1.2.0.203, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Miro en mis referencias, y solo tengo una referencia al Utility version 1.2.0.203 (la otra es vieja).

¿Alguna sugerencia sobre cómo averiguo qué está intentando hacer referencia a esta versión anterior de este archivo DLL?

Además, no creo que tenga este antiguo ensamblaje en mi disco duro. ¿Hay alguna herramienta para buscar este antiguo ensamblado versionado?

Respuesta

362

El .NET Assembly loader no puede encontrar 1.2.0.203, pero encontró un 1.2.0.200. Este conjunto no coincide con lo solicitado y, por lo tanto, se obtiene este error. En palabras simples, no puede encontrar el ensamblaje al que se hizo referencia. Asegúrese de que pueda encontrar el ensamblaje correcto colocándolo en el GAC o en la ruta de la aplicación. También vea http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx.

+13

pero cuando miro las referencias del proyecto, apunta hacia 1.2.0.203 ... nada parece apuntar a 1.2.0.200 más – leora

+99

Exactamente - está * buscando * para 1.2.0.203, pero * encontró * 1.2.0.200. Averigüe dónde está ese archivo y reemplácelo con la versión correcta. –

+13

Hice una pregunta similar aquí y obtuve una solución de trabajo: http://stackoverflow.com/questions/4187907/net-picking-wrong-referenced-assembly-version –

84

Puede hacer un par de cosas para solucionar este problema. Primero, use la búsqueda de archivos de Windows para buscar su ensamblaje (.dll) en su disco duro. Una vez que tenga una lista de resultados, haga clic en Ver-> Elegir detalles ... y luego marque "Versión de archivo". Esto mostrará el número de versión en la lista de resultados, para que pueda ver de dónde viene la versión anterior.

Además, como dijo Lars, verifique su GAC para ver qué versión se encuentra allí. This Microsoft article indica que los ensamblados que se encuentran en el GAC no se copian localmente durante una compilación, por lo que es posible que deba eliminar la versión anterior antes de reconstruirlos todos. (Consulte mi respuesta al this question para obtener notas sobre cómo crear un archivo por lotes para hacer esto por usted)

Si todavía no puede averiguar de dónde viene la versión anterior, puede usar la aplicación fuslogvw.exe que se envía con Visual Studio para obtener más información sobre las fallas de enlace. Microsoft tiene información sobre esta herramienta here. Tenga en cuenta que deberá habilitar el registro configurando la clave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog en 1.

+14

No olvide que la versión del archivo no es parte de la identidad de los ensamblajes. La versión de ensamblaje es, pero no tiene que ser la misma que la versión de archivo. –

+0

Si usa fuslogvw para servicios, lea http://blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx – Nick

+0

La búsqueda del nombre de archivo resolvió mi problema. Tenía una versión anterior de la DLL en mi carpeta temporal ASP.Net e InstallShield la estaba utilizando en lugar de la versión actualizada. Solución limpia, reconstruir, reiniciar la PC no hizo nada. Funcionó bien localmente y explotó cada vez que se implementó. – JumpingJezza

19

Me encontré con este problema y el problema fue que tenía una copia anterior del .dll en el directorio de depuración de mi aplicación. Es posible que también desee verificar allí (en lugar del GAC) para ver si lo ve.

51

Me acabo de topar con este problema yo mismo, y encontré que el problema era algo diferente de lo que los demás se han topado.

Tenía dos archivos DLL a los que se refería mi proyecto principal: CompanyClasses.dll y CompanyControls.dll. Que estaba recibiendo un dicho error de tiempo de ejecución:

Could not load file or assembly 'CompanyClasses, Version=1.4.1.0, Culture=neutral, PublicKeyToken=045746ba8544160c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference

El problema era que yo no tenía ningún archivo CompanyClasses.dll en mi sistema con un número de versión 1.4.1. Ninguno en el GAC, ninguno en las carpetas de la aplicación ... ninguno en ninguna parte. Busqué en todo mi disco duro. Todos los archivos de CompanyClasses.dll que tenía eran 1.4.2.

El problema real, me enteré, fue que CompanyControls.dll hace referencia a la versión 1.4.1 de CompanyClasses.dll. Recién compruebe CompanyControls.dll (después de hacer que haga referencia a CompanyClasses.dll 1.4.2) y este error desapareció.

+0

+1 Algo similar me pasó cuando tengo una de mis referencias DLL una versión anterior de Caliburn Micro. –

+0

yo también, su experiencia me despertó donde tengo que buscar y me solucionaron mi problema. – Esen

+0

Otra opción sería abrir el proyecto 'CompanyControls', hacer clic con el botón derecho en la referencia' CompanyClasses.dll' -> propiedades -> 'SpecificVersion = false' –

8

Para nosotros, el problema fue causado por otra cosa. El archivo de licencia para los componentes de DevExpress incluía dos líneas, una para una versión anterior de los componentes que no estaba instalada en esta computadora en particular.La eliminación de la versión anterior del archivo de licencia resolvió el problema.

La parte molesta es que el mensaje de error no dio ninguna indicación de qué referencia estaba causando los problemas.

+2

En mi caso, después de actualizar a la nueva versión de DevExpress, el archivo .resx de un formulario contenía referencias a la versión de biblioteca desinstalada anterior. Tuve que abrir .resx en la vista de código y corregir la versión a una nueva o eliminar las entradas no válidas. – Artemix

-4

Intente agregar lo que falta al caché de ensamblados global.

+0

En realidad, no recibo los votos a favor.Cuando falta una referencia, a veces la agrega al GAC ES la respuesta, ASUMIENDO que es donde se señala la referencia. Estoy de acuerdo con que esta respuesta podría haber sido redactada como una respuesta directa a la pregunta del autor, un enlace sobre cómo obtenerla en el GAC, pero no penalicemos una respuesta general, especialmente con las otras ramas aquí. Veo SO como un grupo de posibles respuestas al tipo de error, no solo al escenario específico. Y no tienen más de 50 representantes, por lo que no pueden agregar un comentario a la pregunta o publicaciones (que en mi humilde opinión debería cambiar). – vapcguy

22

Si está usando Visual Studio, intente con "limpiar la solución" y luego reconstruya su proyecto.

+36

Estaría muy sorprendido si eso hiciera la diferencia ... –

+5

Esta suele ser la solución para mí. A menudo, eliminar 'bin' y' obj' lo hace. Básicamente, algo que solía hacer referencia sigue sentado allí tratando de satisfacer el mismo requisito. Por ejemplo, una versión anterior es algo a lo que me he referido directamente y la nueva versión está en NuGet. –

5

Se lanza exactamente el mismo error si intenta vincular tarde utilizando la reflexión, si el conjunto al que se está vinculando obtiene un nombre seguro o si se ha cambiado su token de clave pública. El error es el mismo aunque no se haya encontrado ningún conjunto con el token de clave pública especificado.

Necesita agregar el token de clave pública correcto (puede obtenerlo usando sn -T en el dll) para resolver el error. Espero que esto ayude.

+1

Por favor, elabore - ¿Qué es "sn -T"? ¿Y dónde agrego el token de clave pública? –

+3

"sn.exe" es una herramienta que viene con Visual Studio, es una herramienta de línea de comandos que se puede ejecutar desde el símbolo del sistema de Visual Studio. Simplemente ejecute el símbolo del sistema de Visual Studio (desde el menú de inicio), navegue a la carpeta que contiene su ensamblaje y escriba "sn -T " donde es el nombre completo de la DLL. Esto obtiene la información de "Token" de la Asamblea. Una vez que tenga esto, cuando esté haciendo un enlace atrasado con reflejo, ingrese la información del token en la cadena id de ensamblado (es decir, "Assembly = MyAssembly.dll, clave pública Token = ) –

+2

Gracias por esta respuesta. Recibí este error al hacer referencia a una sección de configuración en mi App.ini. Recientemente había firmado el ensamblado, por lo que PublicKeyToken = null tuvo que actualizarse con el token nuevo (correcto). – Liam

5

La mía era una situación muy similar a la publicación de Nathan Bedford pero con un ligero giro. Mi proyecto también hizo referencia al dll cambiado de dos maneras. 1) Directamente y 2) Indirectamente al hacer referencia a un componente (biblioteca de clases) que tenía una referencia al dll cambiado. Ahora mi proyecto de Visual Studio para el componente (2) hacía referencia a la versión correcta del dll cambiado. Sin embargo, el número de versión del compñente no se modificó. Y como resultado, la instalación de la nueva versión del proyecto no reemplazó ese componente en la máquina cliente.

Resultado final: La referencia directa (1) y la referencia indirecta (2) señalaban las diferentes versiones del dll cambiado en la máquina del cliente. En mi máquina de desarrollo funcionó bien.

Resolución: eliminar la aplicación; Eliminar todo el DLLS de la carpeta de la aplicación; Reinstalar. Simple como eso en mi caso.

-3

Haga clic con el botón derecho en la referencia en VS establezca la propiedad "Versión específica" en True.

+4

Creo que quiere decir falso. – RayLoveless

13

En mi caso, era una versión anterior de la DLL en el directorio C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \. Puede eliminar o reemplazar la versión anterior, o puede eliminar y volver a agregar la referencia a la DLL en su proyecto. Básicamente, de cualquier manera creará un nuevo puntero a los archivos ASP.NET temporales.

+2

Esto funcionó para mí cuando cerré Visual Studio, detuvo IIS y eliminó todos los archivos ASP.NET temporales. Tenga en cuenta que puede haber archivos en la carpeta Framework y Framework64 si está en la máquina de 64 bits, así como en las carpetas .NET 2.0 y 4.0! –

+0

Utilicé Windows Start Función de búsqueda de menú para encontrar todas las DLL creadas por mi solución y luego eliminar todo el lote, donde sea que se encuentren. Podría hacerlo sin miedo porque solo deberían crearse durante mi depuración de Visual Studio. Como VS reconstruirá los archivos DLL que faltan y nada fuera de mi solución debería hacer referencia a ellos, esta fue una operación "segura" para mí. – Zarepheth

0

Recibí este mensaje de error al hacer referencia a un ensamblaje que tenía el mismo nombre que el ensamblado que estaba construyendo.

Esto compiló pero sobrescribió el ensamblaje al que se hace referencia con el ensamblado de proyectos actual, lo que ocasionó el error.

Para solucionarlo Cambié el nombre del proyecto y las propiedades de ensamblaje disponibles haciendo clic con el botón derecho en el proyecto y seleccionando "Propiedades".

4

Voy a dejar que alguien se beneficie de mi estupidez de corte. Tengo algunas dependencias a una aplicación completamente separada (llamémosla App1). Los archivos DLL de esa aplicación1 se extraen en mi nueva aplicación (App2). Cada vez que realizo actualizaciones en APP1, tengo que crear nuevas dll y copiarlas en App2. Bien. . . Me cansé de copiar y pegar entre 2 versiones diferentes de App1, así que simplemente agregué un prefijo 'NEW_' al dll.

Bien. . . Supongo que el proceso de compilación escanea la carpeta/bin y cuando coincide incorrectamente con algo, aparece con el mismo mensaje de error que el anterior. Eliminé mis versiones "nuevas" y las compilé solo a la perfección.

4

Mi problema fue copiar el código fuente en una máquina nueva sin pasar por encima de ninguno de los ensamblados a los que se hace referencia.

Nada de lo que hice corrigió el error, así que a toda prisa, eliminé por completo el directorio BIN. Reconstruí mi código fuente y funcionó de ahí en adelante.

3

Acabo de encontrar otro motivo para obtener este error. Limpié mi GAC de todas las versiones de una biblioteca específica y construí mi proyecto con referencia a la versión específica implementada junto con el ejecutable. Cuando ejecuto el proyecto recibí esta excepción en busca de una versión más nueva de la biblioteca.

El motivo fue publisher policy. Cuando desinstalé las versiones de la biblioteca de GAC, me olvidé de desinstalar también los ensamblados de política de editor, así que en lugar de usar mi ensamblado desplegado localmente, el cargador de ensamblaje encontró la política de editor en GAC que le indicaba que buscara una versión más nueva.

0

Tuve un problema similar al intentar actualizar un archivo DLL de mi sitio web.

Este error estaba ocurriendo, cuando simplemente copié este archivo DLL en la carpeta bin a través de FTP.

que resuelven este problema:

  1. detener el sitio web;
  2. se necesita copiar el archivo DLL/archivos DLL;
  3. iniciar el sitio web
2

Mi app.config contiene una

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/> 

para Npgsql. De alguna manera en la máquina del usuario, mi app.exe.config desapareció. No estoy seguro de si fue un usuario tonto, un error del instalador o un antivirus aún así. Reemplazar el archivo resolvió el problema.

33

Lo siguiente redirecciona cualquier versión de ensamblaje a la versión 3.1.0.0. Tenemos un script que siempre actualizará esta referencia en App.config para que nunca tengamos que lidiar con este problema nuevamente.

A través de la reflexión puede obtener el ensamblado publicKeyToken y generar este bloque desde el archivo .dll mismo.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
<dependentAssembly> 
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

Tenga en cuenta que sin un atributo de espacio de nombres XML (xmlns) esto no funcionará.

+1

Esto funcionó para mí. Cambié el 'newVersion = 3.3.3' a 'newVersion = 3.1.0' – jward01

+0

Mejor no ir por la ruta de reenlace si puedes evitarlo. Cuando ese error viene a morderte, morderá mucho. – BanksySan

3

Para mí, la configuración de cobertura de código en el archivo "Local.testtesttings" "provocó" el problema. Olvidé actualizar los archivos que se mencionaron allí.

0

Me enfrenté al mismo problema mientras ejecutaba las pruebas de mi unidad.

El error indica claramente que el problema es: cuando intentamos cargar el ensamblado, el cargador de ensamblados .NET intenta cargar sus conjuntos referidos basándose en sus datos de manifiesto (nombre del ensamblado, token de clave pública, versión).

Para comprobar los datos del manifiesto:

  1. Abra el símbolo del sistema de Visual Studio,
  2. Tipo 'ildasm' y arrastra la necesidad de ensamblaje a la ventana y abrir la vista ILDASM manifiesto.A veces, MANIFEST contiene un ensamblaje con dos versiones, una versión anterior y otra nueva (como Utility, Version=1.2.0.200 y Utility, Version=1.2.0.203). En realidad, el conjunto referido es Utility, Version=1.2.0.203(new version), pero dado que el manifiesto contiene incluso Utility, Version=1.2.0.200(old version), el cargador de ensamblados .NET intenta descubrir este archivo DLL versionado, no puede encontrar y arroja una excepción.

Para resolver esto, simplemente arrastre cada uno de los ensamblados dependientes del proyecto a la ventana ILDASM por separado y verifique qué ensamblaje dependiente contiene los datos del manifiesto con la versión del ensamblaje anterior. Simplemente reconstruya este ensamblaje dependiente y remítalo a su proyecto.

+0

Desafortunadamente, no puedo arrastrar el ensamblado a Ildasm ya que el error impide que se ensamble el ensamblado ... – Number8

+0

Esto suena prometedor pero no entiendo cómo solucionarlo. He localizado un proyecto en mi solución que tiene dos versiones System.Web.Mvc. Cuando lo reconstruyo, todavía contiene dos versiones. ¿Cómo puedo deshacerme de la referencia a la versión anterior? –

29

Si no se preocupan por la versión y sólo quiere que su aplicación se ejecute a continuación, haga clic derecho en la referencia y establecer 'versión específica' false. Las otras soluciones no funcionarían para mí. enter image description here

+1

Esa configuración solo tiene efecto en * tiempo de compilación *. Después de compilarse, necesitará la misma versión de ensamblaje exacta con la que la compiló. Consulte http://stackoverflow.com/questions/24022134/how-exactly-does-the-specific-version-property-of-an-assembly-reference-work-i –

3

Me gustaría agregar que estaba creando un proyecto básico ASP.NET MVC 4 y agregué DotNetOpenAuth.AspNet a través de NuGet. Esto produjo el mismo error después de que hice referencia a un archivo DLL no coincidente para Microsoft.Web.WebPages.OAuth.

Para solucionarlo hice un Update-Package y limpiar la solución para una reconstrucción completa.

que trabajó para mí y es una especie de una forma perezosa, pero el tiempo es dinero :-P

+0

Respuesta similar para mí. 'Update-Package -reinstall' reinstala todos los paquetes NuGet en la misma versión. – Jess

1

En su AssemblyVersion en el archivo AssemblyInfo.cs, utilice un número de versión fija en lugar de especificar *. El * cambiará el número de versión en cada compilación. Ese fue el problema para esta excepción en mi caso.

0

me encontré con este problema durante el uso de un repositorio de paquetes interna. Agregué el paquete principal al repositorio interno, pero no las dependencias del paquete. Asegúrese de agregar todas las dependencias, dependencias de dependencias, recursivas, etc. a su repositorio interno también.

16

he añadido un paquete de NuGet, sólo para darse cuenta una parte de recuadro negro de mi solicitud se refería a una versión anterior de la biblioteca.

que eliminar el paquete y se hace referencia estática archivo DLL de la versión anterior, pero el archivo web.config no se ha actualizado desde:

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" /> 
</dependentAssembly> 

a lo que debería haber recurrido a cuando he desinstalado el paquete:

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" /> 
</dependentAssembly> 
+0

He visto esto donde, al menos para el módulo Entity Framework cuando usa NuGet, si hace clic con el botón derecho en su solución, vaya a Administrar paquetes NuGet para Solución, luego a Paquetes instalados> Todos, seleccione ese módulo, seleccione Administrar, usted generalmente puede deseleccionarlo de su proyecto. Eso debería limpiar cosas como esta sin tener que hacerlo de forma manual, suponiendo que el proveedor hizo su diligencia debida. Pero bueno, como parece, a veces no lo hacen, si así es como lo eliminaste. – vapcguy

1

borrar manualmente el conjunto usado de ubicación de la carpeta y luego añadir la referencia a nuevos montajes podría ayudar.

0

que tenían el mismo problema hoy, que me impidió realizar Añadir a la migración después de hacer cambios en el marco de la entidad.

tenía dos proyectos en mi solución, llamémosles "Cliente" y "Datos" - un proyecto de biblioteca de clases que celebró mis modelos EF y el contexto. El cliente hizo referencia al proyecto de datos.

que había firmado ambos proyectos, y luego más tarde realizado cambios en un modelo de EF. Después de eliminar la firma, pude agregar las migraciones y luego pude volver a firmar el proyecto.

espero que esto puede ser útil para alguien, ahorrándoles de frustración prolongada ..

0

he tenido este problema después de comenzar a usar InstallShield.Aunque el orden de compilación mostró que el proyecto de instalación era el último que se estaba construyendo fuera de servicio.

corregí esto haciendo dependientes de cualquier otro proyecto sobre ella - esto obligó a la instalación de la construcción de la última y por lo tanto eliminado mi desajuste montaje. Espero que esto ayude.

1

En mi caso, el problema era entre la silla y el teclado :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. 
(Exception from HRESULT: 0x80131040) 

dos o más diversos montajes querían utilizar una versión diferente de la biblioteca DotNetOpenAuth, y eso no sería un problema. Por otra parte, en mi equipo local, un web.config se actualiza automáticamente por NuGet:

<dependentAssembly> 
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" /> 
</dependentAssembly> 

Entonces me di cuenta de que me había olvidado de copiar/desplegar el nuevo web.config para el servidor de producción. Entonces, si tiene una forma manual de implementar web.config, verifique que esté actualizada. Si tiene web.config completamente diferente para el servidor de producción, debe fusionar estas secciones dependientes del ensamblaje en sincronización después de usar NuGet.

1

me dieron el mismo error ... En mi caso se resolvió de la siguiente manera:

  • Al principio, cuando se instaló la aplicación a continuación, la gente de aquí había utilizado Microsoft Enterprise Library 4.1 en la aplicación.
  • En la semana anterior mi máquina se ha formateado & después de que hoy en día cuando construí esa aplicación, entonces me dio un error que el montaje Enterprise Library no se encuentra.
  • Luego instalé Microsoft Enterprise Library 5.0 que obtuve en Google como primera entrada de búsqueda.
  • Luego, cuando construí la aplicación, me dio el error anterior, es decir, la definición del manifiesto del ensamblaje ubicado no coincide con la referencia del ensamblaje.
  • Después de mucho de un trabajo de búsqueda & análisis, he encontrado que la aplicación se refería 4.1.0.0 & el archivo DLL en la carpeta bin era de la versión 5.0.0.0
  • lo que hice fue entonces he instalado la biblioteca Microsoft Enterprise 4.1 .
  • retira la referencia anterior (5.0) & añadió la referencia 4.0.
  • Construyó la aplicación & voila ... funcionó.
4

Recibí este error al construir en el servicio de compilación de Team Foundation Server. Resultó que tenía varios proyectos en mi solución usando diferentes versiones de la misma biblioteca agregada con NuGet. Eliminé todas las versiones antiguas con NuGet y agregué la nueva como referencia para todos.

Team Foundation Server pone todos los archivos DLL en un directorio, y sólo puede haber un archivo DLL de un cierto nombre a la vez, por supuesto.

+0

Otra forma es hacer clic en "Administrar paquetes de NuGet para la solución ..." y actualizar su proyecto de prueba y el proyecto bajo prueba a la misma (más reciente) versión. – lixonn

0

Esto también puede ocurrir si está utilizando ambos AssemblyInfo.cs con las etiquetas AssemblyVersion y su archivo .csproj tiene con un valor diferente. Al hacer coincidir AssemblyInfo o eliminar la sección todos juntos, el problema desaparece.

9

En mi caso, este error se produjo mientras se ejecuta una aplicación ASP.NET. La solución fue:

  1. Eliminar los obj y bin carpetas en la carpeta del proyecto

Clean no funcionaba, la reconstrucción no funcionó, todas las referencias estaban bien, pero no fue escribiendo una de las bibliotecas. Después de eliminar esos directorios, todo funcionó perfectamente.

+1

Gracias, Levi Fuller. Esta respuesta debe estar más arriba; ¡para mi situación fue perfecto! Para mí, este error comenzó cuando hice una copia de seguridad de mi web.config y Visual Studio siguió cargando este archivo de configuración en lugar de la configuración real, incluso después de que eliminé la copia duplicada. Esto lo resolvió. Gracias. – BruceHill

+0

Funciona para mí también. Todavía no estoy seguro de por qué funciona esto :( – KangarooWest

1

Este es mi método para solucionar este problema.

  1. En el mensaje de excepción, obtenga el nombre de la biblioteca "problemática" y el número de versión "esperado".

enter image description here

  1. Encuentra todas las copias de ese .dll en su solución, haga clic en ellos, y comprobar la versión del archivo .dll que es.

enter image description here

bien, así que en este ejemplo, mi .dll es definitivamente 2.0.5022.0 (por lo que el número de versión de excepción está mal).

  1. Buscar el número de versión que se muestra en el mensaje de excepción en todas las .csproj archivos en su solución. Reemplace este número de versión con el número real de la dll.

Por lo tanto, en este ejemplo, me gustaría sustituir este ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 

... con esto ...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 

Trabajo hecho!

+0

¿Qué sucede si mis archivos csproj no tienen referencia de versión? –

0

OK, una respuesta más. Anteriormente, creé mi aplicación como de 64 bits y cambié la ruta de salida (Proyecto/Propiedades/Compilación/Salida/Ruta de salida) en consecuencia. Recientemente cambié la aplicación a 32 bits (x86), creando una nueva ruta de salida. Creé un acceso directo al lugar donde creí el .exe compilado. No importa lo que haya cambiado sobre la fuente, obtuvo el error manifiesto de no coincidencia. Después de aproximadamente una hora de frustración, casualmente comprobé la fecha/hora del archivo .exe, vi que era obvio que hacía referencia a viejos .dll. Estaba compilando la aplicación en el directorio anterior y mi atajo hacía referencia a la más reciente. Se modificó la ruta de salida a donde debe ir el archivo .exe , se ejecutó el acceso directo y el error desapareció. (frente de palmadas)

0

La pregunta ya tiene una respuesta, pero si el problema ha ocurrido con el paquete NuGet en diferentes versiones en la misma solución, puede intentar lo siguiente.

Abra el Administrador de paquetes NuGet, como puede ver, la versión de mi proyecto de servicio es diferente a otras.

A continuación, actualice los proyectos que contengan una versión anterior de su paquete.

Enter image description here

0

Sólo Para eliminar el contenido de la carpeta bin de su proyecto y reconstruir la solución solucionado mi problema.

2

limpiar y reconstruir la solución podría no reemplazar todos los dll del directorio de salida.

lo que voy a sugerir es tratar de cambiar el nombre de la carpeta en "bin" para "oldbin" o "obj" a "oldobj"

e intente construir su silution nuevo.

en caso de que esté utilizando archivos dll de terceros que deberá copiar en la carpeta "bin" u "obj" recién creada después de la compilación correcta.

Espero que esto funcione para usted.

0

El problema era que había viejos dll's dployed que se eliminaron en una nueva compilación. Para solucionarlo, acabo de marcar la casilla para eliminar archivos adicionales en el destino al publicar. Remove additional files at destination

Cuestiones relacionadas