ClickOnce 自動更新報錯:部署標識與預訂不匹配
一、遇到的問題
最近的專案採用的是VS自帶的部署工具ClickOnce部署檢測更新。開始並沒有什麼問題,但是最近一兩次經常遇到:伺服器更新版本後,客戶端升級會出現以下錯誤:
執行此操作期間檢測到下列錯誤。
* [28.12.2017 18:16:17] System.Deployment.Application.DeploymentException (SubscriptionState)
- 部署標識與預訂不匹配。
- 源: System.Deployment
- 堆疊跟蹤:
在 System.Deployment.Application.SubscriptionStore.CheckUpdateInManifest(SubscriptionState subState, Uri updateCodebaseUri, AssemblyManifest deployment, Version currentVersion, Boolean& bUpdateInPKTGroup)
在 System.Deployment.Application.ApplicationActivator.PerformDeploymentUpdate(SubscriptionState& subState, String& errorPageUrl)
在 System.Deployment.Application.ApplicationActivator.ProcessOrFollowShortcut(String shortcutFile, String& errorPageUrl, TempFile& deployFile)
在 System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String&
errorPageUrl)
在 System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
二、查詢問題
在網上搜羅一番,也有很多人遇到這樣的問題,但基本上都是說的什麼證書籤名不一致或者直接不用簽名。我看了我的簽名證書是一致的,取消簽名依然無效。經過無限的搜尋嘗試也沒有最終解決,好想砸電腦,好想放棄clickonce。最後自己看看錯誤內容,猜測這個錯誤提到的“部署標識”應該是在某個檔案中,於是開始想方法檢視這個部署標識的位置。
1.在釋出資料夾中檔案目錄如下圖。
Application Files資料夾中是已經發布的程式檔案。我重新發布了一次 並把最新的Application Files替換到伺服器,執行舊版本程式,並沒有提示更新。於是開啟XXX.application檔案,發現很多版本和證書的資訊。我連續釋出兩次,檢視兩個檔案的不同之處,發現每次釋出會更新一些值:
最後通過仔細的對比已正式釋出的版本和預更新報錯的版本xxx.application檔案,發現了一個不一樣的地方 如下圖:
最後用一個測試工程釋出驗證了一下:
專案屬性->生成->平臺目標-->any cpu: processorArchitecture="msil"
專案屬性->生成->平臺目標-->x86: processorArchitecture="x86"
專案屬性->生成->平臺目標-->x64:processorArchitecture="amd64"
三、解決方案
於是推測是應為平臺目標改變了,引起了這個問題。(興奮中) 於是我檢視伺服器上久版本配置檔案中的processorArchitecture屬性,重新選擇了對應的平臺目標重新發部了一次,在釋出過程中提示:
四、小結
方案雖然很簡單、但是過程很艱辛啊,我遇到的問題是通過這個方法解決的,可能還會有其他原因引起,比如換了證書,解決方案可能不同。在此留下腳印,希望對遇到同樣問題的盆友有幫助。