Строгое имя sn.exe: не удалось установить пару ключей - объект уже существует
У меня есть 2 разные версии одного и того же проекта на моей машине. Один из транка кода, а другой из ветви кода. Эти проекты используют ключ.pfx для включения сильного именования. Когда я впервые попытался скомпилировать транковую версию проекта, я получил следующую ошибку:
Невозможно импортировать следующий файл ключей: sgKey.pfx. Файл ключа может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в CSP со строгим именем со следующим именем контейнера ключей: VS_KEY_45891C38BC1BB345
Для решения этой проблемы я использую sn.exe с помощью следующей команды:
sn -i sg Key.pfx VS_KEY_45891C38BC1BB345
Это решает проблему с проектом ствола, который затем успешно собирается.
Тем не менее, когда я пытаюсь построить версию ветвления проекта, я получаю ту же первоначальную ошибку (с тем же именем контейнера ключей), и когда я пытаюсь установить сертификат, используя sn.exe, он (что неудивительно) выдает следующую ошибку:
Не удалось установить пару ключей - объект уже существует
Это имеет смысл в том смысле, что я использовал те же infile и container для команды sn, но я пытаюсь понять это:
- Если этот объект уже существует, почему проект не может быть собран, так как может показаться, что сертификат уже установлен.
- Как решить эту проблему (например, могу ли я удалить, а затем переустановить? И если да, то как?)
2 ответа
Мне удалось решить мою проблему, не полностью понимая причину. Я нашел пост о подобной проблеме здесь, но он не соответствовал моим обстоятельствам точно, поскольку я только когда-либо входил в свою машину как единственный пользователь.
В посте было показано, как удалить контейнер, но я тоже не смог этого сделать, так как в нем говорилось, что контейнер не существует. Однако он предложил мне запустить командную строку от имени администратора, чего я раньше не делал. Это позволило мне удалить и переустановить сертификат, и обе версии проекта теперь успешно собираются.
Я предполагаю, что каким-то образом сертификат был первоначально установлен (мной) под другим пользователем, чем тот, который я пытался установить во второй раз, хотя я не знаю, почему это произойдет, так как я когда-либо входил в систему только машина как один пользователь. Для меня это остается загадкой.
Резюме:
- Запустите командную строку разработчика от имени администратора, в противном случае вы получите вводящую в заблуждение ошибку о том, что контейнер не существует.
- Запустите sn -d VS_KEY_XXXXXXXXXXX, чтобы удалить старый ключ.
- Теперь вы сможете переустановить сертификат.
У нас была такая же проблема после "обновления" в Windows 10. Вот что сработало для нас:
- Запустите командную строку от имени администратора.
- Запустите sn -m n, чтобы сделать сертификаты основанными на пользователях, а не на компьютерах.
- Установите сертификат как обычно (либо "sn -i VS_KEY_XX", либо используя диалог "Свойства" в VS).
Это было похоже на то, как обновление сохраняло старые контейнеры в некоторой скрытой области, где они не могли быть удалены (но также мешали добавлению того же контейнера). Переход к пользовательскому режиму позволяет с чистого листа с точки зрения текущего пользователя. Обратите внимание, что если у вас есть несколько пользователей на одном компьютере, вероятно, каждый из них должен будет зарегистрировать сертификаты.