注册插件和/或工作流程时出错。插件程序集不包含所需类型或程序集内容无法更新

时间:2012-02-14 13:33:29

标签: c# c#-4.0 dynamics-crm dynamics-crm-2011

我使用CRM 2011 Developer Toolkit在Visual Studio 2010中实现了一个自定义工作流。它与系统生成的命名空间一起工作正常。但是,当我更改项目的命名空间时,它会抛出错误“错误注册插件和/或工作流程。插件程序集不包含所需的类型或程序集内容无法更新。” while部署它。我已经更改了.crmregister文件,项目属性和源代码中的命名空间。然后是这里的问题。?

15 个答案:

答案 0 :(得分:11)

如果您通过CRM开发工具包和软件包部署您的客户工作流程,然后如果您更改了任何类名称或命名空间,则必须手动更改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>

答案 1 :(得分:8)

在我们的案例中,我们使用了ILMerge,并且我们不小心将Microsoft.Xrm.Sdk.dll合并到了我们的插件中,删除了这个dll(copy local = false)修复了这个问题。

此合并的dll无论如何都无法正常工作,因为它会在重写成员时抛出安全异常违反继承安全规则:'Microsoft.IdentityModel.Claims.ClaimsIdentity.System.Runtime.Serialization.ISerializeable.GetObjectData此GetObjectData存在于Microsoft.Xrm中。 Sdk.dll因此来自SandBox部署的安全性异常。

答案 2 :(得分:7)

我在使用CRM工具包时遇到了完全相同的问题。

这就是我解决问题的方法:

  1. 转到CRM中的设置/解决方案/ Yoursolution
  2. 删除与插件程序集
  3. 相关的SDK消息处理条目
  4. 从解决方案中删除插件程序集本身
  5. 返回Visual Studio并部署
  6. 我没有必要手动编辑任何内容。

答案 3 :(得分:1)

尝试更改装配版本。

答案 4 :(得分:1)

您是否引用任何其他程序集(如Microsoft.Xrm.Sdk)?如果是这样,如果要部署到数据库,则需要使用ILMerge之类的工具合并它们。如果要部署到磁盘,则还需要它们存在于汇编文件夹中或安装在GAC中。

答案 5 :(得分:1)

您可能需要检查组织中是否存在具有相同名称的插件作为已注册的插件。取消注册插件并重新注册程序集和步骤。

答案 6 :(得分:1)

如果你有一些自动生成的类,例如您通过右键单击Create Plug-in创建的插件然后将其删除,您必须清理RegisterFile.crmregister中的跟踪。 如果是插件,则需要删除整个分支的名称。

答案 7 :(得分:1)

如果您更改/重构插件的主要类名,就会发生这种情况。 (例如,当代码分析抱怨你有拼写错误并且你修复它时) 此问题仅在您下次执行部署时出现

所以,如果你已经掌握了插件类的名称......

  1. 在默认CRM解决方案中,从“插件装配”
  2. 中删除插件
  3. 查看插件的RegisterFile.crmregister文件。 在XML标记上,您将看到3个对您的类名称的引用 - 其中一些可能尚未更新。
  4. 更新此文件中的名称并重新部署。
  5. 进行。

    (好的,只是注意到Masoud Ghabachi在很久以前提到过......)

答案 8 :(得分:0)

取消注册该插件,然后重新注册。

答案 9 :(得分:0)

除上述情况外,请检查.snk文件或.pfx文件。它在您的第二次部署中是否会发生变化。

在这种情况下尝试使用旧的源代码,否则您需要重新注册插件/工作流程。

答案 10 :(得分:0)

确保您的插件/工作流类是公共类。

我得到了同样的错误,因为我的插件类是私有的。

答案 11 :(得分:0)

检查RegisterFile.crmregister工作流属性TypeName不得包含任何空格。

答案 12 :(得分:0)

我更改了签名密钥文件并得到了错误,将其更改回上一个密钥文件为我解决了问题。

答案 13 :(得分:0)

您的版本必须与已经为升级发布的版本相同。我们有一个主要版本的1个主要版本,0个未成年人 - 我们试图发布的版本是12个主要版本,0个未成年人版本。

我们将Visual Studio解决方案编号更改回版本1.0.0.0,构建,加载程序集,更新 - 它运行良好!

如果使用它们,则删除它不会解决问题,因为工作流的依赖性。

我们切换了Tracing On并找到了SQL脚本来找到罪魁祸首。

答案 14 :(得分:0)

当preImage元素放在寄存器中的postImage元素之后时,我得到了这个。交换他们的位置修复它。