Gérer les plug-ins dans une seule solution

Catégorie : Maintenabilité, Conception

Potentiel d’impact : Faible

Symptômes

Lors de l’importation d’une solution qui contient un plug-in, une erreur semblable à celle-ci peut s’afficher :

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

Cette erreur se produit lorsqu’un nouveau type de plug-in est ajouté à un assembly existant dans la solution et que cet assembly est également inclus dans une autre solution.

Instructions

La définition d’un assembly de plug-in doit être conservée au sein d’une solution unique. Vous pouvez avoir une solution distincte qui contient uniquement des définitions de plug-in pour aider à gérer les plug-ins.

Schémas problématiques

Voici deux exemples de la condition dans laquelle cette erreur peut se produire. Dans les deux exemples, il existe un assembly de plug-in représentant le fichier BasicPlugin.dll. Les deux exemples échouent avec une erreur : PluginType [BasicPlugin.CreateAccount] not found in PluginAssembly.

Exemple 1 : Mettre à niveau une solution existante

Il existe deux solutions qui incluent BasicPlugin.dll.

Dans l’environnement cible (managé), l’assembly BasicPlugin.dll a la couche de solution suivante.

Couche Solution Solution Version Types de BasicPlugin
1 AnotherSolution v1.0.0.0 UpdateLead
2 PluginSolution v1.0.0.0 UpdateLead

Ensuite, vous mettez à jour pluginSolution, en modifiant la version en v2.0.0.0.0 et incluez un nouveau type de plug-in : CreateAccount.

Cela échouera, car l’assembly de plug-in de composant de solution de niveau supérieur (couche 1) ne contient pas le nouveau CreateAccount type de plug-in.

Exemple 2 : Installer une nouvelle solution

Dans l’environnement cible (managé), l’assembly BasicPlugin.dll a la couche de solution suivante.

Couche Solution Version de la Solution Types de Plugin de Base
1 PluginSolution v1.0.0.0 UpdateLead
CreateAccount

Lorsque vous essayez d’installer une nouvelle solution, AnotherSolution v1.0.0.0, qui a un assembly BasicPlugin qui contient uniquement le type de plug-in : UpdateLead

L’erreur se produit, car le BasicPlugin.dll dans cette nouvelle solution ne contient pas le CreateAccount PluginType.

Solutions

La bonne solution consiste à éviter la situation dans laquelle le même module d’extension est inclus dans plusieurs solutions.

Dans les deux exemples ci-dessus, lorsque l’assembly de plug-in fait partie de deux solutions différentes, vous devez conserver des types de plug-in cohérents dans les deux solutions. Si vous continuez à gérer les deux assemblys plug-in dans les deux solutions, vous devez mettre à jour les deux solutions chaque fois que vous ajoutez un nouveau type de plug-in à l’assembly.

Informations supplémentaires

Les solutions peuvent contenir des plug-ins. Les plug-ins se composent d’enregistrements PluginAssembly et PluginType associés les uns aux autres.

PluginAssembly contient le contenu binaire de l’assembly. PluginType contient une référence à la classe dans l’assembly qui implémente l’interface IPlugin .

En tant que composants de solution, les plug-ins participent au système de couche de solution. Si le même assembly est inclus dans deux solutions installées les unes sur les autres, les validations de type échouent s’il existe des types incompatibles dans les assemblys.

Voir aussi

Couches de solution