Solución al problema: “FileNotFoundException” Con mi receptor de función.

Estaba trabajando en una función la semana pasada que añadiría algunos receptores de eventos a una instancia específica de la lista. (He mencionado un poco sobre ese receptor lista aquí).

Utilizando la línea de comandos, Pude instalar la característica con ningún error (pero véase más abajo para el error oculto). Cuando trató de implementar la función en el sitio, MOSS se quejó de una "FileNotFoundException" error. Esta entrada de blog describe cómo lo solucioné.

Este es el error que MOSS me mostró en el navegador web:

Característica ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ no se pudo instalar porque la carga de la unidad del receptor de sucesos "xyzzyFeatureReceiver_0" no se pudo: System.IO.FileNotFoundException: No se pudo cargar archivo o ensamblado ' xyzzyFeatureReceiver_0’ o una de sus dependencias. El sistema no puede encontrar el archivo especificado.
Nombre de archivo: ' xyzzyFeatureReceiver_0’
en System.Reflection.Assembly.nLoad(Nombre de archivo AssemblyName, Cadena codeBase, Pruebas assemblySecurity, Asamblea locationHint, StackCrawlMark& stackMark, ThrowOnFileNotFound Boolean, ForIntrospection Boolean)
en System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Pruebas assemblySecurity, StackCrawlMark& stackMark, ForIntrospection Boolean)
en System.Reflection.Assembly.InternalLoad(Cadena assemblyString, Pruebas assemblySecurity, StackCrawlMark& stackMark, ForIntrospection Boolean)
en System.Reflection.Assembly.Load(Cadena assemblyString)
en Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
AVS: Registro de enlace de la Asamblea esté apagado.
Para habilitar el registro de falla de enlace de Asamblea, establecer el valor del registro [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Para 1.
Nota: Hay alguna penalización de rendimiento asociado con el registro de fracaso de Asamblea bind.
Para desactivar esta característica, eliminar el valor del registro [HKLMSoftwareMicrosoftFusion!EnableLog].

Solucionar problemas con Windows SharePoint Services.

Sé cómo deliberadamente causar ese error: No instale al ensamblado en la GAC. Pero, fue en la GAC. Normalmente instalar a ensamblados en la GAC arrastrándolas hasta la c:\carpeta windowsassembly explorador de windows. Nunca he sentido 100% cómodo hacerlo, porque siempre pensé que Gacutil existe por una razón … así que intenté. No hace ninguna diferencia.

He buscado en las Internets y encontré este post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

El cartel pasó a usar la misma broca de raíz del código (en el libro de WSS dentro de esta lista) así que esa fue una señal de esperanza. Sin embargo, la sugerencia de decorar el conjunto con un [Asamblea: ] Directiva no tiene sentido para mí. De todos modos lo probé y tenía razón. No hace ninguna diferencia.

Entonces me di cuenta que mi definición de la clase no era público. Le hice público y que no hizo ninguna diferencia.

Siguiente, Fui a la molestia de permitir que la "Asamblea bind fallo registro" (siguiendo las instrucciones útiles y precisas proporcionados) y esto es donde las cosas comenzaron a obtener interesantes. Ese registro me muestra que el tiempo de ejecución busca por todas partes en el servidor para mi montaje. Incluso parece ser buscando en mi botiquín. Pero … no busca en la GAC.

Puse en mi chaqueta de invierno e ir a buscar los Internets y encontrar que alguien ha tenido este problema también. La larga discusión en publicación peters apagado en nada y no encuentro una solución.

Muevo mi Asamblea en uno de los lugares que el registro afirma está buscando y hacer avanzar un poco más. Yo estoy recompensado con un nuevo error en el navegador cuando intento activar la función de:

Error al crear el objeto receptor de característica del conjunto "xyzzyFeatureReceiver_0", Escriba "Conchango.xyzzyFeatureReceiver" para la función b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Valor no puede ser nulo.
Nombre de parámetro: tipo
en System.Activator.CreateInstance(Tipo tipo, Privada booleano)
en System.Activator.CreateInstance(Tipo tipo)
en Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Solucionar problemas con Windows SharePoint Services.

Tiempo para un último viaje a las Internets!

Esta vez puedo saber, como era de esperarse lo suficientemente, que MOSS emite este error porque la Asamblea no está en la GAC.

Quiero sacar algo positivo de esto y tratar de sentir un poco orgullosos que he creado el Fugitivo de ensamblados MSIL, pero no funciona. Estoy molesto solo llano. Me encontré murmurando "huevo o la gallina" bajo mi aliento.

Finalmente decido punt. Crear un proyecto completamente nuevo y copiar/pegar el código del proyecto incredible-cloaked-from-the-GAC-assembly no trabajo sobre este nuevo proyecto. (Busco una bandera de compilación llamada algo así como "hide from enlace si instalado en el GAC" pero no puede encontrar uno).

Instalar la característica y activarlo y … funciona! Por lo tanto, Después de todo lo que, Básicamente tuve que ' reiniciar’ mi proyecto. Esta es otra razón por qué odio a equipos.

Aprendo algo útil de este. Había instalado características usando la línea de comandos stsadm todo el dia y la "-la fuerza" opción por costumbre. Por alguna razón, No utilizo la fuerza opción - cuando he instalado el nuevo proyecto. A esta hora, Hice realidad, realmente olvide copiar el montaje de este nuevo proyecto en la GAC. Como un resultado, Recibí esa FielNotFoundException"" error. A esta hora, I got it from stsadm, no cuando trató de activar la función vía el web browser. Por lo tanto, -fuerza realmente juega dos papeles. Le permite volver a instalar una característica existente. También le permite instalar una característica buggy que no puede trabajar en tiempo de ejecución mediante la supresión de los errores. Probablemente dice tanto en la ayuda en alguna parte pero nunca lo noté.

</final>

Etiquetas de Technorati: ,

3 pensamientos sobre "Solución al problema: “FileNotFoundException” Con mi receptor de función.

  1. Francisco

    También, Tuve mi 2 horas de histéricos momentos nintendoSIXTYFOURRRR en mala forma cuando renombrado el Namespace en el receptor de la característica, para ayudar a la pista donde tuya o de otra persona empezó.

    Respuesta
  2. Francisco

    La raíz del problema se encuentra en el wsp desplegado en la base de datos de sharepoint. Leí tu post y mientras que de hecho arreglar el problema que tenemos una gran solución con varios proyectos y decenas de archivos para mover todo no era una opción.

    No importa cuánto usted actualiza su GAC o su Asamblea, lo que te está dando problemas es la Asamblea en el WSP actual instalado en sharepoint.

    Puede notar fácilmente al tratar de retirar sólo la solución (que es donde ocurre el error). Todo lo que ocurre en "tiempo de retracción" debe considerarse "desplegado wsp"-no sólo el proyecto en sí.

    Mi solución fue:

    – Administración central: Solución de cancelar
    – stsadm: deletesolution
    – Visual Studio => Proyecto => Paquete
    – stsadm: addsolution-ProjectbinDebugProject.wsp de archivo
    – stsadm: deploysolution-nombre project.wsp-inmediato - allowgacdeployment.-fuerza
    – Visual Studio => Implementar

    También he eliminado las carpetas bin y depuración del proyecto antes de ejecutar implementar nuevo, que no tenga ningún efecto pero vale la pena comentar.

    Esto funciona para ambos

    "La función … no se pudo instalar porque la carga de la unidad del receptor de sucesos"
    y
    "Error al crear el objeto receptor de característica del conjunto"

    Gracias!
    Francisco

    Respuesta
  3. Tom Clarkson

    Acabo de pasar un par de horas tratando de solucionar este mismo problema y encontrar una solución mejor que simplemente recreando el proyecto.

    Resultó que por alguna razón que Visual Studio se había fijado el objetivo de construir a x 86 en vez de x 64 o MSIL – la Asamblea fue en la GAC, Pero no la misma GAC que 64 poco buscaba en SharePoint.

    Respuesta

Contesta

su dirección de correo electrónico no será publicada. Los campos necesarios están marcados *