我们刚刚将Visual Studio 2008项目升级到Visual Studio 2010。我们所有的程序集都使用Verisign代码签名证书进行强签名。自从升级以来,我们不断得到以下错误:

无法导入以下密钥文件:companyname.pfx。密钥文件可能有密码保护。若要纠正此问题,请尝试重新导入证书或使用以下密钥容器名称手动将证书安装到强名称CSP: VS_KEY_3E185446540E7F7A

这发生在一些开发人员机器上,而不是其他机器上。一些用来修复这个问题的方法有时有效,包括:

从Windows资源管理器重新安装密钥文件(右键单击PFX文件并单击安装) 第一次在新机器上安装Visual Studio 2010会在您第一次打开项目时提示您输入密码,然后它就可以工作了。在从Visual Studio 2008升级的机器上,没有此选项。

我已经尝试使用SN.EXE实用工具(强名称工具)向强名称CSP注册密钥,正如错误消息所建议的那样,但每当我使用Visual Studio 2010附带的版本运行带有任何选项的工具时,SN.EXE只是列出了它的命令行参数,而不是做任何事情。无论我提供什么参数,都会发生这种情况。

为什么会发生这种情况,有什么明确的步骤来解决它?我打算放弃ClickOnce安装和微软代码签名。


当前回答

我通过更改Visual Studio项目的.csproj文件中的下面一行来解决这个问题:

这抛出了“不能导入”错误:

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

将值更改为false可以消除错误。

其他回答

我发现在某些情况下,您应该尝试在安装之前删除此密钥。所以,请做到以下几点:

sn -d VS_XXXX Sn -i mykey。可以VS_XXX

对我来说什么都没用,但后来我去查看了证书管理器(mmc.exe)。证书没有导入到个人存储中,所以我手动导入了它,然后对项目进行了编译。

请参阅使用Visual Studio项目设计器的签名页面“签名程序集”的ClickOnce清单签名和Strong-Name程序集签名。

我也遇到了同样的问题,删除存储和读取都不起作用。我必须做以下事情。

获取一份OpenSSL。它适用于Windows。或者使用Linux盒子,因为他们几乎都有。 执行如下命令导出密钥文件: Openssl pkcs12 -in certfile. exePFX -out backupcertfile.key Openssl pkcs12 -export -out certfiletosignwith。PFX -keysig -in backupcertfile.key

然后在项目属性中可以使用PFX文件。

我知道这是一个老问题了,但是大多数答案在其他devops系统上都不起作用了。VS_KEY_xxx在虚拟机上是不同的,所以我们不能使用sn.exe。

这是我在GitHub Actions中使用的yaml脚本来构建我的VSTO项目,这需要点击一次。其实在“run:”之后只需要两行powershell:

- name: Import certificate
  shell: pwsh
  run: |
    $Secure_String_Pwd = ConvertTo-SecureString "<Password>" -AsPlainText -Force
    Import-PfxCertificate -FilePath '${{github.workspace}}\project\project1_TemporaryKey.pfx' -CertStoreLocation Cert:\CurrentUser\My -Password $Secure_String_Pwd

我通过更改Visual Studio项目的.csproj文件中的下面一行来解决这个问题:

这抛出了“不能导入”错误:

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

将值更改为false可以消除错误。