CRM 2011 Developer Toolkitを使用して、Visual Studio2010に1つのカスタムワークフローを実装しました。システムで生成された名前空間で正常に機能していました。しかし、プロジェクトの名前空間を変更すると、エラーがスローされます プラグインやワークフローの登録中にエラーが発生しました。プラグインアセンブリに必要なタイプが含まれていないか、アセンブリの内容を更新できません。」 それを展開している間。また、.crmregisterファイル、プロジェクトプロパティ、およびソースコードの名前空間を変更しました。では、ここでの問題は何ですか。
CRM開発ツールキントとパッケージを介してカスタムワークフローにデプロイし、その後、クラス名または名前空間を変更した場合は、Visual Studioでは行われないため、RegisterFile.crmregisterファイルを手動で変更する必要があります。したがって、クラス名をAからBに変更し、名前空間をNからMに変更する場合、RegisterFile.crmregisterファイルの以下のxmlの「TypeName」は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Register xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.Microsoft.com/crm/2011/tools/pluginregistration">
<Solutions>
<Solution Assembly="PackageECRProcesses.CleanRegistration.dll" Id="ab72673b-c0a8-e111-af82-080027dd322f" IsolationMode="None" SourceType="Database">
<WorkflowTypes>
<WorkflowType FriendlyName="any" Name="any" Description="any." WorkflowActivityGroupName="account" Id="f0e3f436-c1a8-e111-af82-080027dd322f" TypeName="M.B" />
</WorkflowTypes>
</Solution>
</Solutions>
<XamlWorkflows />
</Register>
この場合、ILMerge
を使用しましたが、誤ってMicrosoft.Xrm.Sdk.dll
をプラグインにマージし、このdllを削除(コピーlocal = false
)して問題を修正しました。
このマージされたdllは、セキュリティ例外をスローするため、とにかく機能していませんでした
メンバーのオーバーライド中に継承セキュリティルールに違反しました: 'Microsoft.IdentityModel.Claims.ClaimsIdentity.System.Runtime.Serialization.ISerializeable.GetObjectData
このGetObjectDataはMicrosoft.Xrm.Sdk.dllに存在していたため、SandBoxの展開によるセキュリティ例外が発生しました。
CRM Toolkitをいじっているときに、まったく同じ問題が発生しました。
これが私が問題を解決した方法です:
手動で編集する必要はありませんでした。
組織に登録されているプラグインと同じ名前のプラグインが存在するかどうかを確認する必要がある場合があります。プラグインの登録を解除し、アセンブリと手順を再度登録します。
これは、プラグインのメインクラス名を変更/リファクタリングした場合に発生する可能性があります。 (例:コード分析でスペルミスがあり、それを修正した場合)この問題は、次にデプロイを行うときにのみ発生します
したがって、プラグインクラスの名前を変更した場合は...
完了しました。
(MasoudGhabachiがこれについて何年も前に言及したことに気づきました...)
他のアセンブリ(Microsoft.Xrm.Sdkなど)を参照していますか?その場合、データベースにデプロイする場合は、 ILMerge などのツールを使用してマージする必要があります。ディスクにデプロイする場合は、それらもAssemblyフォルダーに存在するか、GACにインストールされている必要があります。
アセンブリのバージョンを変更してみてください。
自動生成されたクラスがある場合、たとえば[プラグインの作成]を右クリックして作成したプラグインを削除した場合は、RegisterFile.crmregisterのトレースをクリーンアップする必要があります。プラグインの場合は、その名前のブランチ全体を削除する必要があります。
お使いのバージョンは、アップグレード用にすでに公開されているものと同じである必要があります。アセンブリバージョンはメジャー1、マイナー0で、公開しようとしたのはメジャー12、マイナー0でした。
Visual Studioソリューション番号をバージョン1.0.0.0、ビルド、ロードアセンブリ、更新に戻しました-そしてそれは機能しました!
ワークフローを使用した場合、ワークフローからの依存関係があるため、削除しても問題は解決しません。
トレースをオンに切り替え、SQLスクリプトを見つけて原因を見つけました。
プラグイン/ワークフロークラスがパブリッククラスであることを確認してください。
プラグインクラスがプライベートだったため、同じエラーが発生しました。
署名キーファイルを変更してエラーが発生しました。以前のキーファイルに戻すと、問題が解決しました。
RegisterFile.crmregisterワークフロープロパティTypeNameにスペースを含めないでください。
これは、レジスタのpostImage要素の後にpreImage要素が配置されたときに取得しました。彼らの場所を交換することはそれを修正しました。
上記の場合とは別に、.snkファイルまたは.pfxファイルを確認してください。 2回目の展開で変更されますか?.
この場合、古いソースコードを使用してみてください。そうしないと、プラグ/ワークフローを再登録する必要があります。
プラグインの登録を解除してから、再度登録してください。