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

Plugins 在CRM 2011中升级自定义工作流活动程序集时出错,plugins,workflow,dynamics-crm-2011,Plugins,Workflow,Dynamics Crm 2011,我有一个由两个工作流引用的自定义工作流活动程序集。程序集当前的版本为1.0.builddate.revision 我已重新编译程序集的更新。现在是1.1.builddate.revision 根据我发现的信息,我认为由于我正在更改程序集版本中的次要编号,因此需要对自定义工作流活动执行升级(而不是更新) 我对升级的理解基本上是,我应该注册一个新程序集,然后将流程工作流指向自定义活动的新修订版 但是,当我尝试(以编程方式)注册程序集时,我得到一个FaultException,它只声明“Cannoti

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

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

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

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

但是,当我尝试(以编程方式)注册程序集时,我得到一个FaultException,它只声明“Cannotinsertreplicatekey”

捕获到System.ServiceModel.FaultException

Message=无法插入重复的密钥。
Source=mscorlib
行动=http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/CreateOrganizationServiceFaultFault
堆栈跟踪:
服务器堆栈跟踪:
位于System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime操作,ProxyRpc&rpc)
在System.ServiceModel.Channels.ServiceChannel.Call(字符串操作、布尔单向、ProxyOperationRuntime操作、对象[]输入、对象[]输出、时间跨度超时)
位于System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage方法调用,ProxyOperationRuntime操作)
位于System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)
在[0]处重试异常:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)
at System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)
位于Microsoft.Xrm.Sdk.IOrganizationService.Create(实体)
位于Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.CreateCore(实体)
位于Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.Create(实体)
在C:\Workspaces\xxxxxx\Lib\PluginRegistrationTool\PluginRegistrationTool\XrmService.cs中的PluginRegistrationTool.XrmService.Create(实体):第390行
内部异常:
我只能猜测这个错误指的是什么。起初,我认为可能我正在尝试上载程序集的旧副本(可能仍然是v1.0.x.x),但我可以通过Intellisense检查,我实际上正在上载一个比我试图注册的组织中存在的程序集更新的版本。除AssemblyVersion编号外,有关自定义活动程序集的所有内容都是相同的

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

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

我已经修改了文件中的注册函数,通过比较CRM中程序集的主要/次要版本号与我尝试上载的程序集的版本号来处理更新与升级方案。我可以看到它正在尝试升级(创建一个新的程序集),但随后我得到了我前面在

organizationServiceProxy.Create(实体)

或文件中代码的第390行

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


提前感谢您的帮助

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

我正在通过传递现有程序集assemblyid创建新程序集。当我调用
proxy.Create()
时,这导致了重复密钥异常。一旦我为程序集实体的assemblyid属性分配了一个新的Guid,
proxy.Create()


谢谢你在这方面的帮助

您可以显示您用于注册新版本和完整FaultException的代码吗?我已更新我的问题以包含异常信息。我已更新我的问题以包含失败代码的链接。嗨,Josh。谢谢你的回复。程序集是使用ILMerge生成的,因为我们引用了自定义的构建逻辑程序集。在项目的后期构建中,我将密钥文件作为命令行参数传递给ILMerge。我假设每次都会对程序集进行签名,但我会再次检查这一点。另外,具有不同主要/次要编号的程序集始终无法升级。我只是在旧程序集和新程序集上运行了sn-T。两者都返回相同的公钥令牌。
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: