我有一个ClickOnce应用程序,该应用程序已更新,可以使用具有MSBuild的现代部署Jenkins Pipeline进行部署。这项工作的一部分是对.manifest和.application文件进行签名。
以前,我们使用<SignFile>
与MSBuild进行签名,使用的是安装在构建计算机上用户个人存储中的证书。它适用于:
<SignFile SigningTarget="MyApp.exe.manifest"
CertificateThumbprint="1a 9f ..."
TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll" />
<SignFile SigningTarget="MyApp.application"
CertificateThumbprint="1a 9f ..."
TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll" />
但是,在21世纪,我们希望通过版本控制或通过API在秘密存储中提供构建所需的一切,因此我们不再依赖于构建服务器处于特定状态。< / p>
那么我们如何使用SignFile在不需要安装证书的情况下对ClickOnce清单和应用程序进行签名?还是我不考虑这一权利?
如果有比使用<SignFile>
更好的方法,请告诉我-据我所知,SignTool.exe和Mage.exe都需要同时安装证书。
答案 0 :(得分:0)
似乎旧的mage.exe比SignTool功能更全。
所以我将mage.exe从C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools
复制到我的项目依赖项文件夹中,然后在MSBuild中对我有用:
<Message Text="Signing APP manifest (.exe.manifest)" />
<Exec Command="Dependencies\mage.exe -sign $(MyAppManifest).exe.manifest -CertFile MyLocalKey.pfx -Password MyPassword123" />
然后,我执行了与部署清单(.application)文件非常相似的操作。
显然,较新版本的mage.exe确实可以支持SHA-256,这与我在该主题上发现的某些网页相反(也许它们较旧)。