我们刚刚将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安装和微软代码签名。


当前回答

这解决了我的问题: 打开VS项目

双击Package.appxmanifest

进入包装选项卡

点击选择证书

单击配置证书

从文件中选择并使用示例。PFX的统一或任何其他创造

其他回答

在Visual Studio 2019和。net 5项目中,这个问题的解决方案是将.pfx文件从我的解决方案中排除,它立即起作用。

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

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

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

作为连接错误报告的原作者,此消息有两种变体(我稍后发现)

对于一个变体,您使用sn.exe(通常如果您正在执行强命名)将密钥导入到强命名存储区。

使用certmgr导入的另一种变体是在协同设计类似“单击一次”部署的内容时(注意,可以在这两种情况下使用相同的cert)。

希望这能有所帮助。

不幸的是,这里提到的方法都不适合我。我必须在docker容器中注册一对PFX,我需要通过命令行传递密码。

所以我重新开发了 sn.exe -i <infile> <container>命令在c#中使用RSACryptoServiceProvider。源代码和应用程序都在GitHub中 SnInstallPfx项目。

SnInstallPfx应用程序接受PFX密钥及其密码。它自动计算密钥容器名称(VS_KEY_*)(借用MSBuild源代码),并将其安装到强名称CSP。

用法:

SnInstallPfx.exe <pfx_infile> <pfx_password>
// or pass a container name if the default is not what you need (e.g. C++)
SnInstallPfx.exe <pfx_infile> <pfx_password> <container_name>

在我的场景中,构建服务使用的用户帐户与我使用sn.exe导入密钥的用户帐户不同。

在将帐户更改为管理员帐户后,一切都正常工作。