この記事では、アセンブリ制約、依存アセンブリ要件、NuGet パッケージ オプションなど、Microsoft Dataverse のプラグイン コードをビルドしてパッケージ化するときに知っておくべき制約と制限について説明します。
プラグイン アセンブリの制約
プラグイン プロジェクトをビルドする際は、次の出力アセンブリ制約に留意してください。
.NET Framework 4.6.2 の使用
プラグインおよびカスタム ワークフロー活動アセンブリ プロジェクトは、.NET Framework 4.6.2 をターゲットにする必要があります。
注意
.NET Framework 4.6.2 の公式 Microsoft サポート は、2027 年 1 月 12 日に終了します。 Microsoft は、2026 年の第 4 四半期中に、.NET Framework 4.8 ランタイムの Dataverse プラグイン サポートを導入する予定です。
アセンブリを 16 MB に制限する
アセンブリには複数のプラグイン クラスやタイプ、カスタム ワークフロー アクティビティを含めることができますが、16MB を超えることはできません。 ベスト プラクティスとして、サイズが 16 MB 未満である限り、プラグインとワークフロー アセンブリを 1 つのアセンブリに統合します。
登録する前にアセンブリに署名する
依存アセンブリ機能を使用しない場合は、Dataverse に登録する前にアセンブリに署名する必要があります。 アセンブリに署名するには、プロジェクトのプロパティまたは Sn.exe (厳密な名前ツール) コマンドの [Visual Studio 署名] タブを使用します。
NuGet CoreAssemblies はサンドボックス内にあります
Microsoft.CrmSdk.CoreAssemblies
NuGet パッケージをプロジェクトに追加すると、必要な Dataverse アセンブリ参照が追加されます。 ただし、アセンブリ自体はプラグイン アセンブリと共にアップロードされません。 これらは、コードが実行されるサーバーのサンドボックス ランタイムに既に存在します。
依存アセンブリ
重要
依存アセンブリ機能は、プラグイン開発にとって非常に重要であるため、すぐに必要でなくても、最初から使用を検討する必要があります。 開発サイクルの後半では、プラグイン プロジェクトに依存アセンブリのサポートを追加することがはるかに困難になります。
Microsoft は ILMerge をサポートしていません。 依存アセンブリ機能は、ILMerge と同等の機能とそれ以上の機能を提供します。
依存アセンブリ機能を使用すると、登録時にDataverse サーバーにアップロードされる単一の NuGet パッケージに、ローカライズされた文字列などの他の必要な .NET アセンブリやリソースをプラグインアセンブリに含めることができます。
NuGet パッケージ ファイルは PluginPackage テーブルに格納されています。 パッケージの内容は、SQL データベースではなくファイル ストレージに保存されます。
NuGet パッケージをアップロードすると、その IPlugin インターフェースを実装するクラスを含む任意のアセンブリが PluginAssembly テーブルに登録され、プラグイン パッケージに関連付けられます。 プロジェクトを開発および保守する際、PluginPackage テーブル行の更新を継続すると、関連するプラグイン アセンブリへの変更がサーバー上で管理されます。
実行時に Dataverse は NuGet パッケージのコンテンツを PluginPackage 行からコピーし、サンドボックス ランタイムに抽出します。 この方法により、プラグインに必要な依存アセンブリを使用できます。
重要
一度作成したプラグイン パッケージの名前とバージョンを (サーバー上で) 変更することはできません。 API 呼び出しを使用してこれを行おうとすると、エラーが発生します。
署名されたアセンブリは必要ありません
プラグイン パッケージで使用されるプラグイン アセンブリに署名する必要はありません。
依存アセンブリ機能を使用せずに個々のプラグイン アセンブリを登録する場合は、アセンブリに一意の名前が付けられるため、署名が必要です。 ただし、プラグイン パッケージ内のプラグイン アセンブリでは、アセンブリは別のメカニズムを使用してサンドボックス サーバーに読み込まれるため、署名は必要ありません。
重要
アセンブリに署名する場合、署名されたアセンブリは署名されていないアセンブリに含まれるリソースを使用できないことに注意してください。 プラグイン アセンブリまたは依存アセンブリに署名する場合は、それらのアセンブリが依存するすべてのアセンブリに署名する必要があります。
署名付きアセンブリが署名なしアセンブリに依存している場合、次のようなエラーが発生します: 「ファイルまたはアセンブリ AssemblyName, Version=Version, Culture=neutral, PublicKeyToken=null、またはその依存関係の 1 つをロードできませんでした。 厳密な名前のアセンブリが必要です。」
依存アセンブリの制限事項
プラグイン依存アセンブリを使用する場合、次の制限が適用されます:
- ワークフロー拡張機能 (カスタム ワークフロー アクティビティ とも呼ばれます) はサポートされていません。
- オンプレミスの 環境はサポートされていません。
- アンマネージド コードはサポートされていません。 アンマネージド リソースへの参照を含めることはできません。
プラグイン パッケージをインポートまたは登録するときのパフォーマンスに関する考慮事項
IPluginを実装する多数の (数百から数千) のクラスを持つアセンブリを含むプラグイン パッケージは、Dataverse へのインポートに比較的長い時間がかかります。
1,000 種類のプラグインのインポート時間は 15 分です。 この期間は、API 呼び出しを使用してソリューションをインポートするか、Web UI を使用してソリューションをインポートするか、プラグイン登録ツールを使用してパッケージを登録するかに関係なく適用されます。
プラグイン パッケージの作成
プラグイン アセンブリと依存するアセンブリを NuGet パッケージにまとめて配置し、Dataverse サーバーにパッケージを登録してアップロードします。 プラグイン プロジェクトが Microsoft.CrmSdk.CoreAssemblies NuGet パッケージに同梱されているもの以外に実行時に依存するアセンブリを必要としない場合は、パッケージを作成する必要はありません。
PAC CLI を使用してプラグイン パッケージを作成して登録する方法と、Visual Studio を使用してプラグイン パッケージを作成して登録する方法について説明します。
すべてのプロジェクトで SDK スタイルを使用する必要がある
プラグイン パッケージには、 SDK スタイルと呼ばれる特定の形式でプロジェクト ファイルからビルドされたカスタム アセンブリのみを含めることができます。 この規則に従わない場合は、プラグイン登録ツールを使用してパッケージを登録しようとすると、エラー ("ファイルが見つかりません") が発生します。
重要
結果のコンパイル済みアセンブリをプラグイン パッケージに追加するすべての MSBuild プロジェクトでは、"SDK スタイル" 形式を使用する必要があります。
SDKスタイルのプロジェクトとは、プロジェクトの .csproj ファイルの内容が次のコード行を含むものです: <Project Sdk="Microsoft.NET.Sdk">。
Power Platform CLI pac plugin init コマンドなどのツールのいずれかを使用してプラグイン プロジェクトを作成すると、プラグイン プロジェクト ファイルは正しい形式になります。 このようなプロジェクトファイルの例を示します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<PowerAppsTargetsPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps</PowerAppsTargetsPath>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion>
<ProjectTypeGuids>{4C25E9B5-9FA6-436c-8E19-B395D2A65FAF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
...
</Project>
クラス ライブラリ プロジェクトなどの別のプロジェクトを Visual Studio ソリューションに追加する場合は、次の手順に従って SDK スタイル プロジェクトを作成します。
- Visual Studio で 、.NET または .NET Standard テンプレートを使用して、新しいプロジェクトをソリューションに追加します。 .NET Framework をターゲットにしないでください。
- ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロジェクト ファイルの編集] を選択して プロジェクト ファイルを編集するか、別のエディターでプロジェクトの .csproj ファイルを開きます。
- プロジェクト ファイルに
<Project Sdk="Microsoft.NET.Sdk">という行があるはずです。 TargetFramework プロパティを<TargetFramework>net462</TargetFramework>に変更し、ファイルを保存します。 - ソリューションのビルドを確認したら完了です。
詳細については、「 .NET Project SDK」を参照してください。
System.Text.Json に依存しない
Microsoft.CrmSdk.CoreAssemblies NuGet パッケージはにSystem.Text.Jsonしているため、デザイン時にSystem.Text.Json型を参照できます。 しかし、サンドボックスのランタイムにある System.Text.Json.dll ファイルは、プロジェクトで参照しているバージョンと同じではない可能性があります。
System.Text.Jsonを使用する必要がある場合は、依存アセンブリ機能を使用し、NuGet パッケージに明示的に含めます。