34

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

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

为了解决这个问题,我使用 sn.exe 和以下命令:

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

这解决了主干项目的问题,然后愉快地构建。

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

安装密钥对失败——对象已存在

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

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

2 回答 2

59

我已经设法解决了我的问题,但没有完全了解原因。我在这里找到了一篇关于类似问题的帖子,但并不完全适合我的情况,因为我只以单个用户身份登录过我的机器。

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

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


概括:

  1. 以管理员身份启动开发人员命令提示符,否则您会收到一个误导性错误,说容器不存在。
  2. 运行 sn -d VS_KEY_XXXXXXXXXXX 删除旧密钥。
  3. 您现在应该能够重新安装证书。
于 2014-05-20T08:17:11.013 回答
6

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

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

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

于 2017-11-28T19:39:52.780 回答