首先,这个问题的范围是 .NET C#,所以这不是 this 的副本所以问题。
我有一个从谷歌文档中获得的语音识别测试代码。代码如下:
public static string DEMO_FILE = "test.mp3";
public static void Main(string[] args)
{
var speech = SpeechClient.Create(); // Exception thrown here
}
当应用程序运行 SpeechClient.Create();
行时,异常 System.InvalidOperationException
被抛出。
异常消息是:'应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,它们就可用。否则,环境变量 GOOGLE_APPLICATION_CREDENTIALS 必须定义为指向定义凭据的文件。参见 https://developers.google.com/accounts/docs/application-default-credentials了解更多信息。”
到目前为止我做了什么?
我用值(私钥 json 文件)设置了 GOOGLE_APPLICATION_CREDENTIALS
变量。我只是在 cmd 中运行以下命令:
设置 GOOGLE_APPLICATION_CREDENTIALS=C:\Users\myusername\Downloads\my-file-name.json
此外,当我使用 echo %GOOGLE_APPLICATION_CREDENTIALS%
在 cmd 中打印环境变量时,会显示文件路径和文件名。
注意:我手动设置了环境,但没有成功。
我应该怎么做才能解决这个恼人的问题?
感谢您的建议和提示。
编辑
下一行可以设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量。但是,当应用程序终止/完成时,无法访问变量。
System
.Environment
.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"C:\my-path\my-private-key.json");
最佳答案
我相信您没有以让您的程序使用它的方式设置环境变量。请注意:
- 如果您通过 Windows 小程序设置环境变量(在我看来这通常是最好的方法),任何现有命令行窗口都不会“看到”更改
- 如果您在一个命令行窗口中设置环境变量,那不会影响任何其他窗口,也不会持久
- 如果您使用
SetEnvironmentVariable
以编程方式设置环境变量,那只会影响当前进程(以及它产生的任何进程)
如果你不确定是否设置了环境变量,很容易记录它,例如
var credentialsPath = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
Console.WriteLine($"Credentials path: {credentialsPath}");
一旦成功,我希望客户端库也能正常工作。
关于c# - 应用程序默认凭据不可用。如果在 .NET C# 中的 Google Compute Engine 中运行,则它们可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60279324/