首页 文章

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

提问于
浏览
28

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

Cannot import the following key file: sgKey.pfx. The key file may be password protected. To correct this, try to import the certificate again or manually install the certificate to the Strong Name CSP with the following key container name: VS_KEY_45891C38BC1BB345

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

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

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

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

Failed to install key pair -- Object already exists

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

  • 如果此对象已存在,为什么项目无法构建,因为看起来已经安装了证书 .

  • 我如何解决这个问题(例如,我可以卸载然后重新安装吗?如果是这样,怎么办?)

2 回答

  • 3

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

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

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


    Summary:

    • 启动开发人员命令提示符 as administrator ,否则存在'll get a misleading error saying the container doesn' .

    • 运行sn -d VS_KEY_XXXXXXXXXXX以删除旧密钥 .

    • 您现在应该可以重新安装证书了 .

  • 49

    在Windows 10上执行“刷新”后,我们遇到了同样的问题 . 这对我们有用:

    • 以管理员身份启动命令提示符 .

    • 运行"sn -m n"使证书基于用户而不是基于机器 .

    • 正常安装证书("sn -i VS_KEY_XX"或使用VS中的"properties"对话框) .

    这就像刷新将旧容器存储在一些隐藏区域中,在那里它们无法删除(但也会干扰添加相同的容器) . 从当前用户的角度来看,更改为基于用户可以提供清晰的平板 . 请注意,如果您在同一台计算机上有多个用户,他们可能都需要注册证书 .

相关问题