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

时间:2014-05-20 07:56:24

标签: .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. 我如何解决这个问题(例如我可以卸载然后重新安装吗?如果是,那怎么办?)

2 个答案:

答案 0 :(得分:51)

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

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

我的假设是,不知何故,证书最初(由我)安装在与我第二次尝试安装的用户不同的用户之下,尽管我不知道为什么会这样,因为我有仅作为单个用户登录到计算机。对我来说,这仍然是一个谜。


<强>要点:

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

答案 1 :(得分:3)

在做了&#34;刷新&#34;之后我们遇到了同样的问题。在Windows 10上。这对我们有用:

  1. 以管理员身份启动命令提示符。
  2. 运行&#34; sn -m n&#34;使证书基于用户而不是基于机器。
  3. 正常安装证书(&#34; sn -i VS_KEY_XX&#34;或使用VS中的&#34;属性&#34;对话框)。
  4. 就像刷新将旧容器存储在一些隐藏区域中一样,它们无法被删除(但也会干扰添加相同的容器)。从当前用户的角度来看,更改为基于用户可以提供清晰的平板。请注意,如果您在同一台计算机上有多个用户,他们可能都需要注册证书。