Plug-Ins in einer einzigen Lösung verwalten
Kategorie: Wartbarkeit, Design
Wirkungspotential: Niedrig
Symptome
Beim Importieren einer Lösung, die ein Plug-In enthält, wird möglicherweise ein Fehler wie dieser angezeigt:
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
Dieser Fehler tritt auf, wenn einer vorhandenen Assembly in der Projektmappe ein neuer Plug-In-Typ hinzugefügt wird und diese Assembly auch in einer anderen Projektmappe enthalten ist.
Anweisungen
Die Definition einer Plug-In-Assembly sollte in einer einzigen Lösung verwaltet werden. Möglicherweise möchten Sie eine separate Lösung, die nur Plug-In-Definitionen enthält, um die Verwaltung der Plug-In zu erleichtern.
Problematische Muster
Unten finden Sie zwei Beispiele für die Bedingung, in der dieser Fehler auftreten kann. In beiden Beispielen gibt es eine Plug-In-Assembly, die die BasicPlugin.dll-Datei darstellt. Beide Beispiele schlagen mit einem Fehler fehl: PluginType [BasicPlugin.CreateAccount] not found in PluginAssembly
.
Beispiel 1: Upgrade einer vorhandenen Lösung
Es gibt zwei Lösungen, die BasicPlugin.dll enthalten.
In der (verwalteten) Zielumgebung verfügt die BasicPlugin.dll-Assembly über die folgenden Lösungsebenen.
Ebene | Lösung | Lösungsversion | BasicPlugin-Typen |
---|---|---|---|
1 | AnotherSolution | v1.0.0.0 | UpdateLead |
2 | PluginSolution | v1.0.0.0 | UpdateLead |
Dann aktualisieren Sie PluginSolution, wodurch sich die Version auf v2.0.0.0 ändert, und fügen einen neuen Plugin-Typ hinzu: CreateAccount
.
Dies schlägt fehl, weil die Lösungskomponenten-Plug-In-Assembly der obersten Ebene (Ebene 1) den neuen Plugin-Typ CreateAccount
nicht enthält.
Beispiel 2: Installieren Sie eine neue Lösung
In der (verwalteten) Zielumgebung verfügt die BasicPlugin.dll-Assembly über die folgenden Lösungsebenen.
Ebene | Lösung | Lösungsversion | BasicPlugin-Typen |
---|---|---|---|
1 | PluginSolution | v1.0.0.0 | UpdateLead CreateAccount |
Wenn Sie versuchen, eine neue Lösung, AnotherSolution v1.0.0.0, zu installieren, die eine BasicPlugin-Assembly mit nur dem Plug-In-Typ UpdateLead
enthält.
Der Fehler tritt auf, weil die BasicPlugin.dll in dieser neuen Lösung den Plugin-Typ CreateAccount
nicht enthält.
Lösungen
Die richtige Lösung besteht darin, Situationen zu vermeiden, in denen dieselbe Plug-In-Assembly in mehreren Lösungen enthalten ist.
Wenn die Plug-In-Assembly in beiden obigen Beispielen Teil von zwei verschiedenen Lösungen ist, müssen Sie in beiden Lösungen einheitliche Plug-In-Typen beibehalten. Wenn Sie weiterhin beide Plug-In-Assemblys in beiden Lösungen beibehalten, müssen Sie beide Lösungen jedes Mal aktualisieren, wenn Sie der Assembly einen neuen Plug-In-Typ hinzufügen.
Weitere Informationen
Lösungen können Plug-Ins enthalten. Plug-Ins bestehen aus PluginAssembly und PluginType Datensätzen, die miteinander verknüpft sind.
PluginAssembly enthält den binären Inhalt der Assembly. PluginType enthält einen Verweis auf die Klasse der Assembly, welche die IPlugin-Schnittstelle bereitstellt.
Als Lösungskomponenten sind Plug-Ins am Lösungsebenensystem beteiligt. Wenn dieselbe Assembly in zwei übereinander installierten Lösungen enthalten ist, schlagen die Typprüfungen fehl, wenn die Assemblys nicht übereinstimmende Typen enthalten.