Intentando registrar un ensamblado en el Plugin Registration Tool es posible que aparezca el siguiente error:
Si vemos los detalles del error:
“””
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Plug-in assembly does not contain the required types or assembly content cannot be updated.
Detail: <OrganizationServiceFault xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorCode>-2147204725</ErrorCode>
<ErrorDetails xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>Plug-in assembly does not contain the required types or assembly content cannot be updated.</Message>
<Timestamp>2013-02-27T08:21:03.6346808Z</Timestamp>
<InnerFault>
<ErrorCode>-2147204725</ErrorCode>
<ErrorDetails xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>Plug-in assembly does not contain the required types or assembly content cannot be updated.</Message>
<Timestamp>2013-02-27T08:21:03.6346808Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText i:nil="true" />
</InnerFault>
<TraceText i:nil="true" />
</OrganizationServiceFault>
Server stack trace:
en System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
en System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
en System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
en System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
en Microsoft.Xrm.Sdk.IOrganizationService.Update(Entity entity)
en Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.UpdateCore(Entity entity)
en Microsoft.Crm.Tools.PluginRegistration.RegistrationHelper.UpdateAssembly(CrmOrganization org, String pathToAssembly, CrmPluginAssembly assembly, PluginType[] type)
en Microsoft.Crm.Tools.PluginRegistration.PluginRegistrationForm.btnRegister_Click(Object sender, EventArgs e)
“””
CAUSA: Este error aparece cuando intentamos actualizar un plugin que tiene una versión distinta en el servidor a la que tenemos en local.
Normalmente esto se produce cuando varias personas están trabajando en el ensamblado mediante la compartición de código fuente en TFS. Si alguien sube una versión del ensamblado actualizada pero no la protege en TFS, el resto de personas seguirá trabajando con una versión antigua y, por lo tanto, dejará de poder actualizar en ensamblado.
También podría ser que si que se hubiera protegido correctamente pero el usuario que ahora intenta subir el plugin haya olvidado darle a “obtener última versión” antes de hacer la modificación.
SOLUCIÓN: La solución depende del posible origen anteriormente comentado. Mi propuesta es probar las siguientes soluciones en el mismo orden en que las pongo (y sólo pasar a la siguiente si no ha funcionado la que se ha probado):
1 – Que el usuario que no puede actualizar el ensamblado obtenga la última versión del ensamblado y vuelva a actualizarlo.
2 – Que el usuario que subió satisfactoriamente la última modificación del ensamblado proteja su solución completa y después el resto de usuario la obtengan.
3 – Desregistrar el ensamblado y volver a registrarlo. En este caso recomiendo hacer una captura del Plugin Registration Tool con todos los pasos definidos puesto que habrá que volver a crearlos.