Gestione complementos en una única solución
Categoría: Mantenibilidad, Diseño
Potencial de impacto: bajo
Síntomas
Al importar una solución que contiene un complemento, es posible que vea un error como este:
ImportSolutionException: Plugin Assemblies import: FAILURE. Error: Plugin: Custom.Xrm.Plugins,
Version=1.2.0.0, Culture=neutral, PublicKeyToken=59f189e458044167 of PluginTypeName:
Microsoft.Crm.Entities.PluginType and PluginTypeNode: caused an exception.: Plugin Types
import: FAILURE. Error: Plugin: Custom.Xrm.Plugins, Version=1.2.0.0, Culture=neutral,
PublicKeyToken=59f189e458044167 of PluginTypeName: Microsoft.Crm.Entities.PluginType caused an
exception.: PluginType [Custom.Xrm.Plugins.CreateContact] not found in PluginAssembly
Este error se produce cuando se agrega un nuevo tipo de complemento a un ensamblado existente en la solución y ese ensamblado también se incluye en una solución diferente.
Instrucciones
La definición de un conjunto de complemento debe mantenerse dentro de una única solución. Es posible que desee tener una solución separada que contenga solo definiciones de complementos para ayudar a administrar los complementos.
Patrones problemáticos
A continuación, se muestran dos ejemplos de la condición en la que puede ocurrir este error. En ambos ejemplos, hay un ensamblado de complemento que representa el archivo BasicPlugin.dll. Ambos ejemplos fallarán con el error: PluginType [BasicPlugin.CreateAccount] not found in PluginAssembly
.
Ejemplo 1: actualizar una solución existente
Hay dos soluciones que incluyen BasicPlugin.dll.
En el entorno de destino (administrado), el ensamblado BasicPlugin.dll tiene las siguientes capas de solución.
Capa | Solución | Versión de la solución | Tipos BasicPlugin |
---|---|---|---|
1 | AnotherSolution | v1.0.0.0 | UpdateLead |
2 | PluginSolution | v1.0.0.0 | UpdateLead |
Luego, actualiza PluginSolution, cambiando la versión a v2.0.0.0 e incluye un nuevo tipo de complemento: CreateAccount
.
Esto fallará porque el ensamblaje del complemento del componente de la solución de nivel superior (capa 1) no contiene el nuevo tipo de complemento CreateAccount
.
Ejemplo 2: instalar una nueva solución
En el entorno de destino (administrado), el ensamblado BasicPlugin.dll tiene las siguientes capas de solución.
Capa | Solución | Versión de la solución | Tipos BasicPlugin |
---|---|---|---|
1 | PluginSolution | v1.0.0.0 | UpdateLead CreateAccount |
Cuando intenta instalar una nueva solución, AnotherSolution v1.0.0.0, que tiene un ensamblado BasicPlugin que contiene solo el tipo de complemento: UpdateLead
El error se produce porque BasicPlugin.dll en esta nueva solución no contiene el PluginType CreateAccount
.
Remedios
La solución correcta es evitar la situación en la que se incluye el mismo conjunto de complemento en varias soluciones.
En los dos ejemplos anteriores, cuando el ensamblaje de complementos es parte de dos soluciones diferentes, debe mantener tipos de complementos consistentes en ambas soluciones. Si continúa manteniendo ambos ensamblajes de complemento en ambas soluciones, deberá actualizar ambas soluciones cada vez que agregue un nuevo tipo de complemento al ensamblaje.
Información adicional
Las soluciones pueden contener complementos. Los complementos constan de registros PluginAssembly y PluginType que están asociados entre sí.
PluginAssembly contiene el contenido binario del ensamblado. PluginType contiene una referencia a la clase en el ensamblado que implementa la interfaz IPlugin.
Como componentes de la solución, los complementos participan en el sistema de capas de la solución. Si el mismo ensamblado se incluye en dos soluciones instaladas una encima de la otra, las validaciones de tipo fallarán si hay tipos no coincidentes dentro de los ensamblajes.