1 つのソリューションでプラグインを管理する
カテゴリ: メンテナンス性、デザイン
影響の可能性: 低い
現象
プラグインを含むソリューションをインポートすると、次のようなエラーが表示されます。
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
ソリューションが含む既存のアセンブリに新しいプラグイン タイプが追加され、そのアセンブリも別のソリューションに含まれている場合、このエラーが発生します。
ガイダンス
プラグイン アセンブリの定義は 1 つのソリューション内で維持する必要があります。 プラグインを管理できる、プラグイン定義のみを含む別のソリューションが必要になる場合があります。
問題となるパターン
このエラーが発生する可能性がある状態の例を以下に 2 つ示します。 どちらの例にも、BasicPlugin.dll ファイルを表すプラグイン アセンブリが存在します。 どちらの例もこのエラーで失敗します: PluginType [BasicPlugin.CreateAccount] not found in PluginAssembly
。
例 1: 既存のソリューションをアップグレードする
BasicPlugin.dll を含むソリューションが 2 つあります。
対象の (管理された) 環境では、BasicPlugin.dll アセンブリに次のソリューション レイヤーが存在します。
レイヤー | ソリューション | ソリューションのバージョン | BasicPlugin タイプ |
---|---|---|---|
6 | AnotherSolution | v1.0.0.0 | UpdateLead |
2 | PluginSolution | v1.0.0.0 | UpdateLead |
次に PluginSolution を更新してバージョンを v2.0.0.0 に変更し、新しいプラグイン タイプ CreateAccount
を含めます。
トップ レベル (レイヤー 1) ソリューション コンポーネント プラグイン アセンブリが新しい CreateAccount
プラグイン タイプを含まないため、これは失敗します。
例 2: 新しいソリューションをインストールする
対象の (管理された) 環境では、BasicPlugin.dll アセンブリに次のソリューション レイヤーが存在します。
レイヤー | ソリューション | ソリューションのバージョン | BasicPlugin タイプ |
---|---|---|---|
6 | PluginSolution | v1.0.0.0 | UpdateLead CreateAccount |
新しいソリューションをインストールする場合は AnotherSolution v1.0.0.0 で、これはプラグイン タイプ UpdateLead
のみを含む BasicPlugin アセンブリを含みます
この新しいソリューションの BasicPlugin.dll は CreateAccount
PluginType を含まないため、エラーが発生します。
解決策
適切なソリューションは、複数のソリューションが同じプラグイン アセンブリを含む状況を回避することです。
上記の両方の例では、プラグイン アセンブリが 2 つの異なるソリューションの一部である場合、両方のソリューションで一貫したプラグイン タイプを維持する必要があります。 両方のソリューションで両方のプラグイン アセンブリを引き続き維持する場合は、アセンブリに新しいプラグイン タイプを追加する際に、両方のソリューションを毎回更新する必要があります。
追加情報
ソリューションにはプラグインを含められます。プラグインは相互に関連付けられた PluginAssembly と PluginType のレコードで構成されます。
PluginAssembly はアセンブリのバイナリ コンテンツを含みます。 PluginType は、IPlugin インターフェイスを実装するアセンブリが含むクラスへの参照を含みます。
ソリューション コンポーネントとして、プラグインはソリューション階層化システムの一部です。 互いの上にインストールされた 2 つのソリューションが同じアセンブリを含む場合、アセンブリが含む型が一致しない場合に型の検証が失敗します。