C# 应用程序默认凭据不可用。如果在.NETC中的Google计算引擎中运行,则它们是可用的#
首先,这个问题的范围是.NETC#,所以这不是so问题的重复 我有一个语音识别测试代码,是从谷歌文档中得到的。代码如下:C# 应用程序默认凭据不可用。如果在.NETC中的Google计算引擎中运行,则它们是可用的#,c#,.net,google-cloud-platform,speech-recognition,speech-to-text,C#,.net,Google Cloud Platform,Speech Recognition,Speech To Text,首先,这个问题的范围是.NETC#,所以这不是so问题的重复 我有一个语音识别测试代码,是从谷歌文档中得到的。代码如下: public static string DEMO_FILE = "test.mp3"; public static void Main(string[] args) { var speech = SpeechClient.Create(); // Exception thrown here } 当应用程序运行时SpeechClient.Create()行,异常系
public static string DEMO_FILE = "test.mp3";
public static void Main(string[] args)
{
var speech = SpeechClient.Create(); // Exception thrown here
}
当应用程序运行时SpeechClient.Create()代码>行,异常系统。引发InvalidOperationException
异常消息为:“应用程序默认凭据不可用。如果在谷歌计算引擎中运行,它们是可用的。否则,必须定义指向定义凭据的文件的环境变量GOOGLE\u APPLICATION\u CREDENTIALS。有关更多信息,请参阅
到目前为止我做了什么?
我设置了GOOGLE\u应用程序\u凭证
变量和值(私钥json文件)。我只是在cmd中运行以下命令:
set GOOGLE\u APPLICATION\u CREDENTIALS=C:\Users\myusername\Downloads\my file name.json
另外,当我使用echo%GOOGLE\u APPLICATION\u CREDENTIALS%
在cmd中打印环境变量时,会显示文件路径和文件名
注意:我由manuelly设置了环境,但它不起作用
我该怎么做才能解决这个烦人的问题
谢谢你的建议和提示
编辑
下一行可以设置GOOGLE\u应用程序\u凭据
环境变量。但是,当应用程序终止/完成时,无法访问变量
System
.Environment
.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"C:\my-path\my-private-key.json");
我相信您没有以允许程序使用的方式设置环境变量。请注意:
- 如果通过Windows小程序设置环境变量(在我看来这通常是最好的方法),任何现有的命令行窗口都不会“看到”更改
- 如果在一个命令行窗口中设置环境变量,则不会影响任何其他窗口,并且不会持久
- 如果使用
SetEnvironmentVariable
以编程方式设置环境变量,则这只会影响当前进程(及其派生的任何进程)
如果您不确定是否设置了环境变量,则很容易记录它,例如
var credentialsPath=Environment.GetEnvironmentVariable(“GOOGLE_应用程序_凭据”);
WriteLine($“凭据路径:{credentialsPath}”);
一旦成功,我希望客户端库也能正常运行。执行此命令时会发生什么:键入%GOOGLE\u APPLICATION\u CREDENTIALS%
?您看到服务帐户JSON密钥文件的内容了吗?看到了。显示了文件路径和文件名。您应该看到内容,而不是路径。然后如何运行代码?如果您不是从该控制台运行它,则不会定义环境变量。我建议添加Console.WriteLine($”凭证路径:{Environment.GetEnvironmentVariable(“GOOGLE_应用程序_凭证”)})
到您的Main
方法,这样您就可以查看它是否实际定义了。@JonSkeet我用控制台检查了环境。WriteLine
是的,您是对的。无法在cmd命令中设置环境。顺便提一下,我更新了这个问题。