我能够使用Signtool使用与构建使用相同的参数来签署文件,所以我想也许我需要导入他的证书,所以我打开了mmc,添加了证书管理单元,经历了导入向导使用本地计算机进行安装(TFS版本在不同于我的帐户下运行,我不知道该帐户的密码,因此我认为在机器级别安装它会起作用)。我浏览了该文件并将其成功导入受信任的根证书颁发机构(见下文):
我在构建时仍然遇到错误。从TFS构建中调用的.proj文件调用signtool,但在ClickOnce期间再次通过构建调用。通过VS屏幕导入证书后,我现在看到:
并收到此错误:
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Unable to find code signing certificate in the current user’s Windows certificate store. To correct this, either disable signing of the ClickOnce manifest or install the certificate into the certificate store.
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Cannot import the following key file: . The key file may be password protected. To correct this, try to import the certificate again or import the certificate manually into the current user’s personal certificate store.
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (2718): Importing key file "les.pfx" was canceled.
证书与.csproj位于同一文件夹中,并被导入商店。
Here's the cert info and the Thumbprint matches what's in the .csproj file:
我在这里可能缺少什么想法?
答案 0 :(得分:1)
根据错误消息,您必须将证书导入代理计算机的个人存储区。当您从个人商店引用证书时,它不会要求输入密码,因此您可以访问代码签名证书。
如果使用ClickOnce构建多个项目,则必须将证书导入每个项目。
请尝试使用Visual Studio命令提示符在构建代理计算机中导入证书:
键入以下命令示例:
sn -i "c:\Pathtofile\.pfx" VS_KEY_C1D3ACB8FBF1AGK4
注意: 带有-i参数的sn.exe会将密钥对安装到名为的密钥容器中。
您还可以尝试创建PowerShell脚本并在构建定义中运行pre-build scripts
以导入证书。
PowerShell脚本示例供您参考:
$pfxpath = 'pathtoees.pfx'
$password = 'password'
Add-Type -AssemblyName System.Security
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($pfxpath, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
$store = new-object system.security.cryptography.X509Certificates.X509Store -argumentlist "MY", CurrentUser
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
$store.Add($cert)
$store.Close()
引用这些主题: