在使用Visual Studio 2017時遇到項目生成失敗的問題,出現錯誤:簽名時出錯: 未能對 bin\Debug\app.publish[項目名稱].exe 簽名。SignTool Error: No certificates were found that met all the given criteri
一、簡單粗暴的解決辦法
這里先說下最簡單的方法,只要取消掉項目的ClickOnce清單簽名即可,此方法不可濫用,有一定的局限性和要注意的地方,后面會說明原因。具體操作方法如下:
1、 在VS右側的解決方案資源管理器里找到生成失敗的項目。
2、 右鍵打開項目的屬性。
3、 在屬性設置界面中找到簽名選項卡。
4、 取消“為ClickOnce清單簽名”勾選。
5、 關閉屬性設置界面后然后重新生成下項目就可以了。
這個方法雖然簡單,但是要根據自己的情況來,不能瞎操作。之所以這樣說是因為SignTool Error的問題和簽名證書有關,如果項目是屬於公司的,或者說這個項目的部署有用到對應的證書,這種情況只能想辦法重新安裝證書,當然具體怎么操作還是得跟着自己的情況來,最好咨詢下項目負責人。
但如果項目本身就沒有要用到簽名證書的業務,那情況就和我類似,糊里糊塗對項目(Windows應用程序的項目)進了發布操作,隨后就莫名其妙的遇到無法生成老報錯的情況。我回想了下自己當時操作,大概就是在發布向導界面瞎按了一通完成了發布,隨后不小心把對應的證書文件刪除了或者做了什么不可描述的操作,結果就出現項目生成時因為簽名失敗而出錯。
PS:其實錯誤信息也提示很清楚了:"No certificates were found...",大意就是:簽名錯誤的原因是沒有找到符合給定規范的證書,所以要么證書丟了要么證書有問題咯。我的項目是一個控制台應用程序(只是用來測試幾段代碼的),VS2017用的是社區版本的。
二、總結與歸納
首先要明白VS2017中Windows應用程序的發布/部署默認使用的是ClickOnce技術進行部署,按照官方文檔.aspx)的說明:
若要使用 ClickOnce 部署發布應用程序,必須用“公鑰/私鑰對”為應用程序的部署清單和應用程序清單簽名。
所以問題關鍵點就是圍繞着項目部署所使用的簽名證書來的,如果仔細留意會發現項目第一次發布后,會自動生成一個.pfx文件(證書文件)。解決方法要么取消相關簽名操作,要么修復有問題的證書(可以檢查下證書是不是被刪除了或者過期之類的)。
幾個額外備注:
- Windows窗體或控制台應用程序都是屬於Windows應用程序。
- 關於ClickOnce部署技術,本文沒有詳細說明,建議另外查閱資料。
本文轉自:https://shiyousan.com/post/636422963761134191