【发布时间】:2015-09-23 17:03:13
【问题描述】:
多年来,我们一直将强名称密钥保存在密钥容器中。 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 可以看到它?关键容器实际存放在哪里?
【问题讨论】:
标签: visual-studio cryptography cryptoapi