2010-09-30 13 views
12

Tengo un problema para superar la excepción. Tengo una estructura relativamente simple separada en dos dll.C# "Método no encontrado" excepción en el tiempo de ejecución sin uso de la reflexión

La primera contiene un IEntityService, IEntity, con implementación básica. El segundo contiene tanto las implementaciones reales como las interfaces. entonces hay un servicio de IMachine que implementa IEntityService y MachineService que implementa IEntityService y EntityService. Se produce una situación similar para una colección de resultados (entidad más servicio). Además, el servicio (máquina y resultado) son clases/interfaces parciales donde una de las clases se genera automáticamente.

Ahora en una de las máquinas ResultMachine estoy tratando de obtener una máquina y, en caso de que no exista, la estoy creando y guardando. Sin embargo, cuando intento ahorrar, obtengo el "Método no encontrado" al intentar acceder a un método de guardado de una clase EntityService. Sin embargo, si envuelvo el método EntityService.Save en un MachineService, funciona sin excepción.

Editado:

no es necesario el código. La resolución fue volver a vincular la referencia. Lo que fue engañoso para mí que mi dll no está en GAC, está vinculado con VS. Además, no está fuertemente firmado, la única diferencia es el número de versión.

+2

¿Puedes publicar el código que ejemplifica tu 'ResultMachine', la interfaz y la implementación que estás tratando de usar? – Oded

Respuesta

6

Mi primer instinto sería comprobar para asegurarse de que los conjuntos contenían las clases con el método que faltaba. Supongo que es posible que la asamblea no se actualizó de inmediato?

9

Hemos conseguido este error un par de veces, puede volver a crear el problema de la siguiente manera:

  • Creado proyecto con 2 de DLL (por ejemplo un archivo DLL programa y una DLL de prueba)
  • programa
  • implementar dll al GAC
  • Añadir nuevo método
  • Crear prueba para probar el nuevo método
  • Generar solución
  • prueba de funcionamiento (no en modo de depuración)

Ahora va a obtener el método que faltan excepción. La razón es que está usando la versión anterior de la DLL que está en GAC y no tiene el método.

Algunas veces usa una versión en caché de la dll anterior, IISreset puede ayudar.

En su caso, compruebe las versiones anteriores de la dll.

+0

También ocasionalmente obtengo esto cuando el entorno de desarrollo contiene una referencia a un dll. Cerrar el entorno de desarrollo y luego volver a abrirlo solucionará ese problema. – Jay

1

Esto me sucedió cuando ingresé y modifiqué la configuración de compilación para generar/bin/Debug en lugar de solo/bin en un caso cuando también estaba usando IIS para alojar el sitio desde la carpeta dev.

Necesita tener los archivos binarios en la misma carpeta que el servicio, en mi caso, y modificar las versiones anteriores en la carpeta bin y colocar compilaciones posteriores en la carpeta/bin/Debug (y/bin/Release) .

O mantenga la configuración tal como está y tenga una acción de compilación posterior para copiar los bits en un nivel, tener diferentes aplicaciones IIS para depurar/liberar o implementar en otra carpeta por completo. Este último es probablemente el más "correcto", pero para mis propósitos me di cuenta después de mucho girar la rueda, que tenía diferentes versiones en la carpeta del servicio. HTH.

0

En mi caso acabo de implementar en una máquina con .NET 3.0 (Windows XP) mientras que el objetivo de compilación ha sido .NET 3.5.

Este mensaje de error realmente no es útil.

Se ha producido un problema con DataContract de System.Runtime.Serialisation.

Cuestiones relacionadas