На протяжении многих лет мы сохранили наш сильный ключ в ключевом контейнере. Visual Studio не поддерживает напрямую, что, но он отлично работает, если вы просто отредактировать файл .csproj и добавить:Почему я теряю контейнер для ключей при перезагрузке?
<KeyContainerName>MyKeyName</KeyContainerName>
Мы устанавливаем ключ в хранилище ключей, выполнив:
sn -m Y
sn -i MyKeyFile.snk MyKeyName
Мы затем может удалить MyKeyFile.snk с этого компьютера, и ключ немного более безопасен.
В последнее время это стало проблемой после перезагрузки. Мы подозреваем, что проблема была поставлена VS 2015, но это может быть вызвано Windows 8 и/или 10. Мы устанавливаем ключ в контейнер ключей, и все работает. Затем мы перезагружать эту машину и строит завершаться:
CSC : error CS7028: Error signing output with public key from container 'MyKeyName' -- Keyset does not exist (Exception from HRESULT: 0x80090016)
Похоже контейнер ключ был потерян в перезагрузке, но, если мы делаем:
sn -m Y
sn -i MyKeyFile.snk MyKeyName
Он терпит неудачу с:
Failed to install key pair -- Object already exists.
Мы должны удалить контейнер ключей с помощью sn -d, а затем добавить его обратно, а Visual Studio - счастлива.
Что здесь происходит? Почему Visual Studio не увидит наш контейнер ключей после перезагрузки, когда sn может его увидеть? Где хранятся ключевые контейнеры?