Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序默认凭据不可用。如果在.NETC中的Google计算引擎中运行,则它们是可用的#_C#_.net_Google Cloud Platform_Speech Recognition_Speech To Text - Fatal编程技术网

C# 应用程序默认凭据不可用。如果在.NETC中的Google计算引擎中运行,则它们是可用的#

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()行,异常系

首先,这个问题的范围是.NETC#,所以这不是so问题的重复

我有一个语音识别测试代码,是从谷歌文档中得到的。代码如下:

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命令中设置环境。顺便提一下,我更新了这个问题。