2025年7月1日 星期二

簽署時發生錯誤: 無法簽署 bin\Debug\app.publish\XXX.exe。SignTool Error: No certificates were found that met all the given criteria.

 這是一個程式碼簽署憑證的問題。當您的專案設定要進行程式碼簽署,但系統找不到合適的憑證時就會出現這個錯誤。以下是幾種解決方法:

方法 1:移除程式碼簽署設定

如果您不需要程式碼簽署,可以在專案中移除相關設定:

  1. 在 Visual Studio 中右鍵點擊專案 → 屬性
  2. 點擊「簽署」頁籤
  3. 取消勾選「簽署 ClickOnce 資訊清單」
  4. 取消勾選「簽署組件」
  5. 儲存並重新建置

方法 2:修改專案檔案

直接編輯 .csproj.vbproj 檔案:

xml
<!-- 移除或註解掉這些行 -->
<!--
<SignManifests>true</SignManifests>
<ManifestCertificateThumbprint>...</ManifestCertificateThumbprint>
<ManifestKeyFile>...</ManifestKeyFile>
-->

<!-- 或者設定為 false -->
<SignManifests>false</SignManifests>
<SignAssembly>false</SignAssembly>

方法 3:建立測試憑證(用於開發環境)

如果您需要程式碼簽署功能:

  1. 在 Visual Studio 中:
    • 專案屬性 → 簽署
    • 點擊「建立測試憑證」
    • 設定密碼(可留空)
    • 點擊「確定」
  2. 或使用命令列建立:
cmd
makecert -r -pe -n "CN=YourCompany" -ss My -sky signature -a sha256 -len 2048 testcert.cer

方法 4:安裝現有憑證

如果您有憑證檔案:

  1. 雙擊 .pfx.p12 憑證檔案
  2. 選擇「目前使用者」或「本機電腦」
  3. 輸入憑證密碼
  4. 選擇「根據憑證類型自動選取憑證存放區」
  5. 完成安裝

方法 5:使用 PowerShell 檢查憑證

檢查系統中可用的憑證:

powershell
# 列出所有個人憑證
Get-ChildItem -Path "Cert:\CurrentUser\My"

# 列出具有程式碼簽署用途的憑證
Get-ChildItem -Path "Cert:\CurrentUser\My" -CodeSigningCert

方法 6:針對 Jenkins 或 CI/CD 環境

如果是在自動化建置環境中:

  1. 在建置腳本中加入:
xml
<PropertyGroup>
  <SignManifests>false</SignManifests>
  <SignAssembly>false</SignAssembly>
</PropertyGroup>
  1. 或在 MSBuild 命令中加入參數:
cmd
msbuild YourProject.csproj /p:SignManifests=false /p:SignAssembly=false

建議做法

開發環境:

  • 通常不需要程式碼簽署,建議使用方法 1 或 2

測試環境:

  • 可以使用測試憑證(方法 3)

正式環境:

  • 使用正式的程式碼簽署憑證(方法 4)

沒有留言:

張貼留言

簽署時發生錯誤: 無法簽署 bin\Debug\app.publish\XXX.exe。SignTool Error: No certificates were found that met all the given criteria.

 這是一個程式碼簽署憑證的問題。當您的專案設定要進行程式碼簽署,但系統找不到合適的憑證時就會出現這個錯誤。以下是幾種解決方法: 方法 1:移除程式碼簽署設定 如果您不需要程式碼簽署,可以在專案中移除相關設定: 在 Visual Studio 中右鍵點擊專案 → 屬性 點擊「...