c# - 应用程序默认凭据不可用。如果在 .NET C# 中的 Google Compute Engine 中运行,则它们可用

标签 c# .net google-cloud-platform speech-recognition speech-to-text

首先,这个问题的范围是 .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/

相关文章:

c# - 如何将 Where 与 IEnumerable 赋值一起使用?

.net - 在 Windsor 中注册通用装饰器

c# - 如何访问 IQueryable<T> 对象中的连续元素?

java - 谷歌云存储: 401 unauthorized error

c# - 获取 Azure 文件共享 (CloudFileDirectory) 中的所有文件

c# - Word 文档中的表格,包含 n 列以适应页面大小,并允许使用 Aspose.words for .Net 跨页面截断列

c# - 删除重复商品并返回订单号

c# - 如何使用多个 await 正确编写健壮的异步代码

python - 修改 MinimalWordCount 示例以从 BigQuery 读取

google-cloud-platform - 控制点 : Can we modify primary key of an existing table in spanner