Partager via


Gérer les plug-ins dans une solution unique

Catégorie : Maintenabilité, Conception

Potentiel d’impact : Faible

Symptômes

Lors de l’importation d’une solution contenant un plug-in, une erreur comme celle-ci peut se produire :

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 solution différente.

Conseils

La définition d’un assembly de plug-in doit être conservée au sein d’une solution unique. Vous souhaiterez peut-être disposer d’une solution distincte contenant uniquement des définitions de plug-in pour vous aider à gérer les plug-ins.

Schémas problématiques

Vous trouverez ci-dessous deux exemples de conditions où 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 échoueront avec l’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 (géré), l’assembly BasicPlugin.dll a la superposition de solutions suivante.

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

Ensuite, vous mettez à jour PluginSolution, en changeant la version en v2.0.0.0 et en incluant un nouveau type de plug-in : CreateAccount.

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

Exemple 2 : Installer une nouvelle solution

Dans l’environnement cible (géré), l’assembly BasicPlugin.dll a la superposition de solutions suivante.

Couche Solution Version de la solution Types BasicPlugin
1 PluginSolution v1.0.0.0 UpdateLead
CreateAccount

Lorsque vous essayez d’installer une nouvelle solution, AnotherSolution v1.0.0.0 contient 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 type de plug-in CreateAccount.

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 à conserver les deux assemblys de 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 sont les enregistrements PluginAssembly et PluginType qui sont associés les uns aux autres.

PluginAssembly contient le contenu binaire de l’assembly. PluginType contient une référence à la classe de l’assembly qui met en œuvre l’interface IPlugin.

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

Voir aussi

Couches de solution