注册插件和/或工作流时出错.插件程序集不包含所需的类型,或者程序集内容无法更新
本文关键字:程序集 插件 或者 类型 更新 包含所 工作流 注册 出错 | 更新日期: 2023-09-27 18:24:22
我在Visual Studio 2010中使用CRM 2011 Developer Toolkit实现了一个自定义工作流。它与系统生成的命名空间配合良好。但是,当我更改项目的命名空间时,它会抛出一个错误"注册插件和/或工作流时出错。插件程序集不包含所需类型或程序集内容无法更新。"在部署它时。我已经更改了.crmregister文件、项目属性和源代码中的命名空间。那这里有什么问题。?
如果您正在通过CRM开发工具kint和软件包部署客户工作流,然后如果您更改了任何类名或命名空间,则必须手动更改RegisterFile.crmregister文件,因为Visual Studio不会为您做这件事。因此,如果您将类名从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.ISerializable.GetObjectData
Microsoft.Xrm.Sdk.dll中存在此GetObjectData,因此SandBox部署出现安全异常。
我刚刚在玩CRM工具包时遇到了完全相同的问题。
这就是我解决问题的方法:
- 转到CRM中的设置/解决方案/您的解决方案
- 删除与插件程序集相关的SDK消息处理条目
- 从解决方案中删除插件程序集本身
- 返回Visual Studio并部署
我不需要手动编辑任何内容。
尝试更改程序集版本。
您是否引用了任何其他程序集(如Microsoft.Xrm.Sdk)?如果是这样,那么如果要部署到数据库,则需要使用ILMerge之类的工具对它们进行合并。如果要部署到磁盘,它们还需要存在于程序集文件夹中或安装在GAC中。
您可能需要检查组织中是否存在与注册插件同名的插件。注销插件并重新注册程序集和步骤。
如果您有一些自动生成的类,例如通过右键单击"创建插件"创建的插件,然后您删除了它,则必须清除RegisterFile.crmregister中的跟踪。如果它是一个插件,你需要用它的名字删除整个分支。
如果您更改/重构插件的主类名,就会发生这种情况。(例如,当代码分析报告您有拼写错误并进行了修复时)这个问题只会在下次部署时出现
因此,如果您已经更改了插件类的名称。。。
- 在默认CRM解决方案中,从"程序集中的插件"中删除您的插件
- 查看插件的RegisterFile.crmregister文件。在XML标记上,您将看到对类名的3个引用,其中一些可能尚未更新
- 更新此文件中的名称并重新部署
完成。
(好吧,我刚刚注意到Masoud Ghabachi很久以前就提到过这个…)
注销插件,然后再次注册。
除上述情况外,请检查.snk文件或.pfx文件。在您的第二次部署中是否发生了变化。
在这种情况下,请尝试使用旧的源代码,否则您需要重新注册插件/工作流。
确保您的插件/工作流类是公共类。
我得到了同样的错误,因为我的插件类是私有的。
Check RegisterFile.crmregister工作流属性TypeName不得包含任何空格。
我更改了签名密钥文件并得到了错误,将其更改回以前的密钥文件为我解决了问题。
您的版本需要与已发布的升级版本相同。我们有一个1大0小的汇编版本,而我们试图发布的是12大0小。
我们将Visual Studio解决方案的编号改回了1.0.0.0版本,构建、加载程序集、更新,一切顺利!
删除它并不能解决问题,因为如果使用了工作流中的依赖项。
我们打开了跟踪,找到了SQL脚本来找到罪魁祸首。
当寄存器中的preImage元素放在postImage元素之后时,我得到了这个结果。交换位置解决了这个问题。