Подтвердить что ты не робот

Сильное имя sn.exe: не удалось установить пару ключей - объект уже существует

У меня есть две разные версии одного и того же проекта на моей машине. Один из соединительной линии кода, а другой - из ветки кода. Эти проекты используют ключ .pfx, чтобы включить сильное именование. Когда я впервые попытался скомпилировать версию trunk проекта, я получаю следующую ошибку:

Невозможно импортировать следующий файл ключей: sgKey.pfx. Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в сильное имя CSP со следующим именем контейнера: VS_KEY_45891C38BC1BB345

Чтобы решить эту проблему, я использую sn.exe со следующей командой:

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

Это устраняет проблему с проектом соединительной линии, который затем с радостью создает.

Однако, когда я пытаюсь построить ветвящую версию проекта, я получаю ту же начальную ошибку (с тем же именем контейнера ключа), и когда я пытаюсь установить сертификат с помощью sn.exe, это (не удивительно) дает следующая ошибка:

Не удалось установить пару ключей - объект уже существует

Это имеет смысл в том, что я использовал один и тот же infile и контейнер в команде sn, но я пытаюсь понять:

  • Если этот объект уже существует, почему проект не может быть создан, так как он будет установлен, сертификат уже установлен.
  • Как я могу это решить (например, могу ли я удалить, а затем переустановить? и если да, то как?)
4b9b3361

Ответ 1

Мне удалось решить мою проблему, не до конца понимая причину. Я нашел сообщение о подобной проблеме здесь, но точно не соответствовал моим обстоятельствам, так как я только когда-то вошел в мою машину как один пользователь.

Сообщение показало, как удалить контейнер, но я не мог этого сделать, поскольку он сказал, что контейнер не существует. Что он сделал, хотя мне было предложено запустить командную строку в качестве администратора, чего я раньше не делал. Это позволило мне удалить и переустановить сертификат, и обе версии проекта теперь успешно завершены.

Мое предположение заключается в том, что каким-то образом сертификат был первоначально установлен (мной) под другим пользователем, чем тот, который я пытался установить во второй раз, хотя я не знаю, почему это было бы, поскольку я только когда-либо вошел в систему как один пользователь. Для меня это остается чем-то загадочным.


Резюме:

  • Запустите командную строку разработчика как администратор, в противном случае вы получите ошибочную ошибку, указав, что контейнер не существует.
  • Запустите sn -d VS_KEY_XXXXXXXXXXX, чтобы удалить старый ключ.
  • Теперь вы можете переустановить сертификат.

Ответ 2

У нас была такая же проблема после выполнения "обновления" в Windows 10. Вот что сработало для нас:

  • Запустите командную строку как администратор.
  • Запустите "sn -m n", чтобы создавать сертификаты на основе пользователя, а не на машинах.
  • Установите сертификат как обычно (либо "sn -i VS_KEY_XX", либо используя диалог "Свойства" в VS).

Это было похоже на обновление, хранящее старые контейнеры в какой-то скрытой области, где они не могли быть удалены (но также мешали добавлению одного и того же контейнера). Переход на пользовательский интерфейс позволяет использовать чистый сланец с точки зрения текущего пользователя. Обратите внимание, что если у вас несколько пользователей на одном компьютере, им, вероятно, необходимо будет зарегистрировать сертификаты.