【发布时间】:2012-04-25 12:59:38
【问题描述】:
我有一个由两个工作流引用的自定义工作流活动程序集。该程序集当前的版本为 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 编号的主要/次要部分与我尝试的程序集的版本号进行比较来处理更新与升级方案上传。我可以看到它正在尝试升级(创建一个新程序集),但是我得到了我之前在
上提到的异常organizationServiceProxy.Create(entity);
或this 文件中代码的第 390 行。
需要注意的重要一点是,我可以使用 SDK 中的 GUI PluginRegistrationTool 执行升级,但不能使用该工具的命令行版本。此外,如果我尝试在具有旧版本程序集的托管解决方案之上导入具有“升级”版本的自定义工作流活动程序集的托管解决方案,我会收到相同的错误消息。
提前感谢您的帮助!
【问题讨论】:
-
能否请您出示您用于注册新版本的代码和完整的 FaultException?
-
我已更新我的问题以包含异常信息。
-
我已更新我的问题以包含指向失败代码的链接。
标签: plugins workflow dynamics-crm-2011