7

actualmente estoy recibiendo el siguiente excepción al intentar utilizar el Enterprise Library Validación bloque de aplicación:"No se pudo cargar el archivo o ensamblado 'Microsoft.Practices.EnterpriseLibrary.Validation" excepción

produjo un error al crear la sección de configuración controlador para la validación: no se pudo cargar el archivo o ensamblado 'Microsoft.Practices.EnterpriseLibrary.Validation, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040) (C: \ Documents and Settings \ My Documents \ Visual Studio 2008 \ Projects \ Testers \ TestProject \ web.config línea 12)

Sé lo que la excepción está tratando de decirme, pero no puedo encontrar la manera de solucionarlo. Solo he instalado una versión de Enterprise Library, y esto es todo (4.1.0.0), así que no veo cómo podría encontrar la versión incorrecta, así que me imagino que es un problema de dependencia. Incluí las DLL "Common", "Validation" y "ObjectBuilder2" de Enterprise Library 4.1 como referencias en el proyecto, por lo que no estoy seguro de qué más me estoy perdiendo. La documentación ciertamente parece indicar que esto es todo lo que necesito.

¿Hay alguna forma de rastrear cuál es el problema de dependencia?

Si es útil, intento utilizar la Herramienta de configuración de biblioteca de empresa para crear un conjunto de reglas de bloqueo de aplicación de validación para la validación de datos en una entidad Entity Framework. Estoy utilizando ASP.NET MVC en Visual Studio 2008.

Gracias por cualquier ayuda/dirección en la que se puede brindar,

Chris

Respuesta

5

activar el registro de fusión y ver lo que el montaje está siendo obligado en tiempo de ejecución.

Hanselman recientemente publicó una publicación que debería ser útil para habilitar el registro y examinar la salida.

http://www.hanselman.com/blog/CommentView.aspx?guid=3654c8f3-c5c3-4dee-a01f-c9a8da3ef2fa

Otra distinción importante que hacer es que las referencias que se agregan al proyecto son las referencias de tiempo de compilación y no afectan a la forma en que el código está obligado en tiempo de ejecución que no sea para especificar un nombre fuerte si una se usó un ensamble fuertemente nombrado. Para averiguar qué está sucediendo en el tiempo de ejecución necesita mirar los registros de enlace. El registro debe mostrar todos los intentos que realiza el tiempo de ejecución al ubicar el ensamblaje. Si el ensamblado no está en el directorio bin junto con el ejecutable, lo más probable es que busque en el GAC y encuentre una versión que no espera.

Tenga en cuenta que el compilador NO utiliza el GAC al hacer referencia a los ensamblados. Por lo tanto, es muy probable que tenga una versión diferente utilizada como referencia en el proyecto que la que haya instalado en el GAC.

Además, es muy fácil averiguar qué versión tiene instalada en el GAC mirando en C: \ Windows \ assembly con Windows Explorer. La versión que se especifica en su mensaje de error será la versión a la que se hizo referencia durante la compilación. Si estas versiones no coinciden, este podría ser su problema, suponiendo que Fusion realmente está buscando en el GAC (lo que será evidente al buscar en el registro de Fusion).

+0

Gracias por los consejos. Eventualmente me di cuenta de que debido a la forma en que estaba haciendo referencias, estaba obteniendo la versión predeterminada de la DLL en lugar de la versión más nueva. Intrépidamente pensé que tenía que construir el DLL yo mismo en lugar de usar el binario precompilado en el paquete, así que obviamente el token no coincidía con el que estaba configurando. Resolví la instalación con Enterprise Library, así que estaba usando las DLL creadas por Microsoft y todo estaba feliz. Consideraré usar fusión, parece que me hubiera ayudado a rastrear este problema más rápido. ¡Gracias! – Chris

Cuestiones relacionadas