在CRM 2011中升级自定义工作流活动程序集时出错

时间:2012-04-13 06:20:33

标签: plugins workflow dynamics-crm-2011

我有一个由两个工作流引用的自定义工作流活动程序集。该程序集目前的版本为1.0.builddate.revision。

我重新编译了程序集的更新。它现在是1.1.builddate.revision。

根据我发现here的信息,我相信由于我正在更改程序集版本中的次要编号,因此需要执行自定义工作流活动的升级(而不是更新)。

我对升级的理解基本上是我应该注册一个新的程序集,然后将流程工作流指向自定义活动的新版本。

但是,当我尝试注册程序集(以编程方式)时,我得到一个FaultException,只是说“无法插入重复键。”

System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> was caught
  Message=Cannot insert duplicate key.
  Source=mscorlib
  Action=http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/CreateOrganizationServiceFaultFault
  StackTrace:
    Server stack trace: 
       at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]: 
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at Microsoft.Xrm.Sdk.IOrganizationService.Create(Entity entity)
       at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.CreateCore(Entity entity)
       at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Create(Entity entity)
       at PluginRegistrationTool.XrmService.Create(Entity entity) in C:\Workspaces\xxxxxx\Lib\PluginRegistrationTool\PluginRegistrationTool\XrmService.cs:line 390
  InnerException: 

我只能猜出这个故障指的是什么键。起初我以为我可能正在尝试上传程序集的旧副本(可能还有一个仍然是v1.0.xx),但我可以通过Intellisense检查我实际上是上传了一个比版本更新的程序集版本在我正在尝试注册的组织中。除了AssemblyVersion编号之外,关于自定义活动程序集的所有内容都是相同的。

我没有得到关于这个过程的内容?我不需要知道如何更新工作流以指向新程序集......我只想知道如何成功地将更新的自定义工作流程活动程序集上传到CRM。

尝试升级自定义工作流活动程序集的代码是this的略微修改版本。该codeplex站点上的PluginRegistrationTool是CRM SDK附带的PluginRegistrationTool的修改版本。此版本将PluginRegistrationTool转换为我在构建过程中使用的命令行实用程序。

我已经修改了this文件中的Register函数来处理更新与升级方案,方法是将CRM中程序集的AssemblyVersion编号的Major / Minor部分与我的程序集的版本号进行比较试图上传。我可以看到它正在尝试升级(创建一个新的程序集),但后来我得到了我之前提到的

的异常

organizationServiceProxy.Create(entity);

this文件中代码的第390行。

需要注意的一件重要事情是,我可以使用SDK中的GUI PluginRegistrationTool执行升级,而不是使用此工具的命令行版本。此外,如果我尝试使用旧版程序集的托管解决方案导入自定义工作流活动程序集的“已升级”版本的托管解决方案,则会收到相同的错误消息。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我通过传入现有的程序集assemblyid来创建新程序集。当我调用proxy.Create()时,这会导致重复键异常。一旦我将新Guid分配给汇编实体的assemblyid属性,proxy.Create()函数调用就可以了。

感谢您的帮助!

答案 1 :(得分:1)

当我忘记用钥匙签署装配时,我看到了这个错误。转到项目属性并确保它已签名。如果没有,取消注册程序集,然后注册已签名的程序集,更新应该在那里工作。