2012-04-13 52 views
4

我有一個由兩個工作流程引用的自定義工作流程活動程序集。程序集目前的版本是1.0.builddate.revision。在CRM 2011中升級自定義工作流程活動程序集時出錯

我已經重新編譯了程序集的更新。它現在在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文件中的註冊功能,通過比較CRM中Assembly的AssemblyVersion編號的Major/Minor部分與我試圖上傳的程序集的版本號來處理更新與升級方案。我可以看到它正試圖升級(創建一個新的組件),但後來我得到我this文件前面提到的

organizationServiceProxy.Create(entity);

或線390碼之外。

需要注意的一件重要的事情是,我可以使用SDK中的GUI PluginRegistrationTool執行升級,而不是使用此命令行版本的工具。另外,如果我嘗試使用較舊版本的程序集在託管解決方案的頂部導入具有「升級」版本的自定義工作流程活動程序集的託管解決方案,則會得到相同的錯誤消息。

在此先感謝您的幫助!

+0

您能否展示您用於註冊新版本和完整FaultException的代碼? – ccellar 2012-04-13 13:57:14

+0

我已更新我的問題以包含例外信息。 – Paul 2012-04-13 14:37:33

+1

我已更新我的問題以包含指向失敗代碼的鏈接。 – Paul 2012-04-13 15:02:02

回答

2

我通過傳入現有的程序集assemblyid來創建新程序集。當我撥打proxy.Create()時,這導致了重複鍵重複例外。一旦我爲彙編實體的assemblyid屬性分配了一個新的Guid,proxy.Create()函數調用就可以正常工作。

感謝您的幫助!

1

我看到這個錯誤出現時,我忘了用鑰匙簽署大會。轉到項目屬性並確保它已簽名。如果不是,取消註冊程序集,然後註冊已簽名的程序集,然後更新應該從那裏開始。

+1

嗨喬希。感謝您的答覆。程序集是使用ILMerge生成的,因爲我們引用了自定義的buiness邏輯程序集。我在項目的後期構建中將一個密鑰文件作爲命令行參數傳遞給ILMerge。我假設每次都會簽署這個程序集,但是我會仔細檢查一下。此外,具有不同主/次編號的程序集一直無法升級。 – Paul 2012-04-13 21:50:08

+1

我剛剛在舊的和新的程序集上都運行了sn -T 。兩者都返回相同的公鑰標記。 – Paul 2012-04-13 22:28:36

相關問題