1. 程式人生 > >ClickOnce 自動更新報錯:部署標識與預訂不匹配

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屬性,重新選擇了對應的平臺目標重新發部了一次,在釋出過程中提示:

   選擇“是”。然後將釋出的檔案更新到伺服器上。執行舊版本,居然不報錯了。並且自動更新了。What  the F U C K,居然是因為這個,有句mmp不是當講不當講罵人

四、小結

      方案雖然很簡單、但是過程很艱辛啊哭,我遇到的問題是通過這個方法解決的,可能還會有其他原因引起,比如換了證書,解決方案可能不同。在此留下腳印,希望對遇到同樣問題的盆友有幫助。