Visual Studio 2022 VSTO清单无法生成SHA256加密时间戳求助
VSTO ClickOnce清单无法添加SHA256加密时间戳问题解决
问题背景
使用Visual Studio 2022开发VB.NET Office插件时,遇到ClickOnce安装程序的VSTO清单无法添加SHA256加密时间戳的问题。Sectigo代码签名证书将于8月过期,需通过加密时间戳确保证书过期后安装程序仍可正常运行。
当前现象
- 证书过期前,安装程序运行正常,显示已知发布者;
- 将测试电脑日期改为10月(证书过期后),安装时提示「发布者无法验证」,显示「未知发布者」,对应文件为
AddIn.vsto; Setup.exe属性中同时包含SHA256签名和时间戳,可正常工作。
已尝试的无效方法
- 在VS中指定Sectigo时间戳服务器(带/不带
?td=sha256参数); - 单独运行Mage工具(带/不带
-a sha256RSA参数); - 更换DigiCert时间戳服务器;
- 重命名旧版本Mage.exe。
环境信息
- 开发/测试电脑:Windows 10 Pro 22H2;
- Visual Studio Pro 2022 64位 17.9.6版本;
- 插件目标.NET Framework 4.8,VSTO不支持更高版本的DotNet-Mage工具。
解决方案
1. 使用正确版本的Mage工具并指定完整参数
VSTO依赖.NET Framework版本的Mage.exe(而非.NET Core的DotNet-Mage),需定位到对应.NET 4.8的工具路径(通常为C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\mage.exe),执行以下命令重新签名清单:
mage.exe -Sign "AddIn.vsto" -CertFile "你的证书文件路径.pfx" -Password "证书密码" -TimeStampUri "http://timestamp.sectigo.com?td=sha256" -Algorithm sha256RSA
关键注意点:必须同时指定-Algorithm sha256RSA算法参数和带?td=sha256的时间戳服务器,确保签名和时间戳均采用SHA256加密标准。
2. 修正Visual Studio发布签名配置
在项目属性的发布设置中,确保签名配置完全符合SHA256要求:
- 进入「项目属性」→「发布」→「签名」;
- 勾选「对ClickOnce清单签名」,选择你的Sectigo证书;
- 点击「详细信息」→「高级」,将哈希算法设置为
SHA256; - 时间戳服务器填写
http://timestamp.sectigo.com?td=sha256,不要省略?td=sha256参数。
3. 手动清理并重新生成签名清单
VS自动发布可能缓存旧清单文件,需手动清理后重新生成:
- 右键项目→「清理」,清除所有编译缓存;
- 右键项目→「生成」,重新编译项目;
- 定位到发布输出目录,找到
AddIn.vsto及Application Files文件夹下的所有清单文件; - 使用步骤1中的Mage命令逐个签名这些清单;
- 重新打包发布项目。
4. 验证时间戳有效性
签名完成后,可通过两种方式验证时间戳是否生效:
- 右键
AddIn.vsto→「属性」→「数字签名」→选中签名→「详细信息」→「查看证书」,确认「时间戳」字段存在,且加密算法为SHA256; - 使用
signtool.exe执行验证命令:
signtool.exe verify /v /pa AddIn.vsto
查看输出内容,确认包含「时间戳签名有效」及SHA256相关的验证信息。
内容的提问来源于stack exchange,提问作者Ed3032b
相关产品推荐
相关产品推荐

