我正在尝试加载包含访问Google Calendar API
的密钥的文件。 Following this tutorial.
为此,我创建了此代码:
var certificate = new X509Certificate2("client_secret.json", "notasecret", X509KeyStorageFlags.Exportable);
我已在我的解决方案中上传了client_secret.json
个文件,这是该文件的路径:"...\Visual Studio 2015\Projects\Calendar\Calendar\bin\Debug\client_secret.json"
但似乎代码无法找到该文件并返回此错误:
无法使用X509Certificate2
找到指定的对象
我还在文件的Always copy
上设置了属性Copy in the output directory
以供阅读。
答案 0 :(得分:8)
在经历了一些头痛之后,我能够理解哪里出错了,正如我在评论中所说,我通过以下方式生成证书:
我做的第一步是为Google日历创建API,之后我点击"创建凭据"并选择"服务帐户",选择我之前创建的API,键类型为json。
此证书与X509Certificate2
等待的密钥不同,因此正确的步骤是:
<强> 1 即可。单击开发者控制台上的管理服务帐户,此工作位于凭证选项卡的右侧,只需稍微点击您的项目列表。
<强> 2 即可。出现一个新窗口,您需要单击要创建密钥的项目旁边的三个点。 (三个点在右边)。
第3 即可。出现一个弹出菜单,然后,您需要点击Create Key
。
<强> 4 即可。选择P12格式,然后单击“创建”。
<强> 5 即可。保存下载到文件夹中的文件并将其链接到您的代码中,特别是:
var certificate = new X509Certificate2(@"C:\key.p12", "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
请注意key.p12
是证书文件的名称,而notasecret
是在步骤4稍后出现的默认密码,换句话说就是与之关联的密码证书。
所以我的代码似乎找到了文件并正确读取它而没有显示任何错误。
无论如何,感谢MegaTron让我怀疑证书不合时宜。
答案 1 :(得分:1)
尝试使用MachineKeySet
。这意味着需要使用本地计算机商店来获取密钥:
var certificate = new X509Certificate2("client_secret.json", "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);