Hace unos días, al intentar desplegar desde Visual Studio una Feature que tenía un EventReceiver, me encontré con el siguiente error:

image

Curiosamente, el proyecto, era casi una copia de otro proyecto en el que todo estaba funcionando bien ¿?

Probé a activar la Feature desde el propio SharePoint, y me dio un agradable “Correlation ID” con una pantallazo de error. Cuando seguí ese ID en el Log, me encontré una descripción del error que no me sirvió de mucho:

Exception: System.InvalidOperationException: Operation is not valid due to the current state of the object

Decidí revisar el Event Viewer, en busca de alguna pista más, y me encontré un error con Event ID: 6644

image

Tirando de MS, encontré la explicación al 6644 aquí:

http://technet.microsoft.com/en-us/library/ff382635.aspx

Donde la causa más probable del error era:

The custom event receiver assembly cannot be found, or it is corrupted.

Pero en mi caso, el assembly era mío, estaba bien referenciado, aparecía en la GAC, y estaba tan recompilado, que si estaba corrupto sería de eso Sonrisa

Por cierto, si le cambiáis el nombre al EventReceiver que os crea Visual Studio, revisar el Elements.xml, ya que no lo actualiza, y luego os fallará porque no encuentra la DLL

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="850">
      <Receiver>
        <Name>MyCustomEventReceiverItemCheckedIn</Name>
        <Type>ItemCheckedIn</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>Encamina.Sharepoint.Project.EventHandler</Class>
        <SequenceNumber>10000</SequenceNumber>
      </Receiver>
  </Receivers>
</Elements>

Siguiendo con el error, después de revisar todas las DLLs del proyecto, asegurarme que estaban en la GAC, y desinstalar e instalar la feature varias veces, me di cuenta que una de las DLLs del proyecto, no estaba incluida en el paquete de la solución. Sin embargo, no me daba el error concreto de que no encontraba la DLL, ya que esa DLL, sí que estaba en la GAC, de otro despliegue anterior, pero por algún extraño motivo, algo se había quedado corrupto, y no era capaz de cargarla.

Finalmente, eliminé la DLL de la GAC, la agregué en el diseñador del paquete:

image

Y al desplegar de nuevo, todo funcionó correctamente!

Espero que le ahorre tiempo a alguien.

Saludos!!!