天天看點

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 自動更新報錯:部署辨別與預訂不比對

,好想放棄clickonce。最後自己看看錯誤内容,猜測這個錯誤提到的“部署辨別”應該是在某個檔案中,于是開始想方法檢視這個部署辨別的位置。

      1.在釋出檔案夾中檔案目錄如下圖。

ClickOnce 自動更新報錯:部署辨別與預訂不比對

Application Files檔案夾中是已經釋出的程式檔案。我重新釋出了一次 并把最新的Application Files替換到伺服器,運作舊版本程式,并沒有提示更新。于是打開XXX.application檔案,發現很多版本和證書的資訊。我連續釋出兩次,檢視兩個檔案的不同之處,發現每次釋出會更新一些值:

ClickOnce 自動更新報錯:部署辨別與預訂不比對
ClickOnce 自動更新報錯:部署辨別與預訂不比對

最後通過仔細的對比已正式釋出的版本和預更新報錯的版本xxx.application檔案,發現了一個不一樣的地方  如下圖:

ClickOnce 自動更新報錯:部署辨別與預訂不比對

最後用一個測試工程釋出驗證了一下:

   項目屬性->生成->平台目标-->any cpu:  processorArchitecture="msil"

   項目屬性->生成->平台目标-->x86: processorArchitecture="x86" 

   項目屬性->生成->平台目标-->x64:processorArchitecture="amd64"

三、解決方案

   于是推測是應為平台目标改變了,引起了這個問題。(興奮中)  于是我檢視伺服器上久版本配置檔案中的processorArchitecture屬性,重新選擇了對應的平台目标重新發部了一次,在釋出過程中提示:

ClickOnce 自動更新報錯:部署辨別與預訂不比對

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

ClickOnce 自動更新報錯:部署辨別與預訂不比對

四、小結

      方案雖然很簡單、但是過程很艱辛啊

ClickOnce 自動更新報錯:部署辨別與預訂不比對

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

繼續閱讀