4

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

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

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

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

但是,当我尝试(以编程方式)注册程序集时,我收到一个 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。

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

通过比较 CRM 中程序集的 AssemblyVersion 编号的主要/次要部分与我尝试上传的程序集的版本号,我修改了文件中的 Register 函数以处理更新与升级方案。我可以看到它正在尝试升级(创建一个新程序集),但随后我得到了我前面提到的异常

organizationServiceProxy.Create(entity);

或此文件中代码的第 390 行。

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

在此先感谢您的帮助!

4

2 回答 2

2

我通过传入现有的程序集 assemblyid 来创建新程序集。当我调用proxy.Create(). 一旦我为程序集实体的 assemblyid 属性分配了一个新的 Guid,proxy.Create()函数调用就可以正常工作了。

感谢您对此的帮助!

于 2012-04-20T21:56:13.720 回答
1

当我忘记用密钥对程序集进行签名时,我已经看到了这个错误。转到项目属性并确保它已签名。如果没有,请取消注册程序集,然后注册已签名的程序集,更新应该从那里开始。

于 2012-04-13T20:58:17.253 回答