强名称sn.exe:无法安装密钥对 - 对象已存在

Chr*_*isG 29 .net certificate duplicates sn.exe strong-named-key

我的机器上有两个不同版本的同一个项目.一个来自代码中继,另一个来自代码分支.这些项目使用.pfx键来启用强命名.当我第一次尝试编译项目的trunk版本时,我收到以下错误:

无法导入以下密钥文件:sgKey.pfx.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_45891C38BC1BB345

要解决此问题,我使用sn.exe和以下命令:

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

这解决了trunk项目的问题,然后愉快地构建.

但是,当我尝试构建项目的分支版本时,我收到相同的初始错误(具有相同的密钥容器名称),当我尝试使用sn.exe安装证书时(不出意外)给出以下错误:

无法安装密钥对 - 对象已存在

这是有道理的,因为我在sn命令上使用了相同的infile容器,但我想要了解的是:

  1. 如果此对象已存在,为什么项目无法构建,因为看起来已经安装了证书.
  2. 我如何解决这个问题(例如,我可以卸载然后重新安装吗?如果是这样,怎么做?)

Chr*_*isG 53

我已经设法解决了我的问题,但没有完全理解原因.我在这里发现了一篇关于类似问题的帖子,但不能完全符合我的情况,因为我只是作为单个用户登录到我的机器.

帖子显示了如何删除容器,但我不能这样做,因为它说容器不存在.虽然它做了什么促使我以管理员身份运行命令提示符,这是我之前没有做过的.这使我可以卸载并重新安装证书,现在项目的两个版本都可以成功构建.

我的假设是,不知何故,证书最初安装(由我)下的用户不同于我第二次尝试安装的用户,但我不知道为什么会这样,因为我只登录过机器作为单个用户.这对我来说仍然是一个谜.


摘要:

  1. 以管理员身份启动开发人员命令提示符,否则您将收到一个误导性错误,指出容器不存在.
  2. 运行sn -d VS_KEY_XXXXXXXXXXX以删除旧密钥.
  3. 您现在应该可以重新安装证书了.

  • 我很高兴我可以帮助约翰,并感谢编辑总结这些步骤. (2认同)
  • 谢谢你的回答,救了我的理智.对于那些随后的注意事项,在树形结构密钥之后我不得不重新启动Visual Studio以使其注意到更改. (2认同)

小智 5

在 Windows 10 上进行“刷新”后,我们遇到了同样的问题。以下是对我们有用的方法:

  1. 以管理员身份启动命令提示符。
  2. 运行“sn -m n”使证书基于用户而不是基于机器。
  3. 正常安装证书(“sn -i VS_KEY_XX”或使用 VS 中的“属性”对话框)。

这就像刷新将旧容器存储在某个隐藏区域中,它们无法删除(但也会干扰添加相同容器)。从当前用户的角度来看,更改为基于用户的方式可以让您一目了然。请注意,如果您在同一台机器上有多个用户,他们可能每个人都需要注册证书。