Учетные данные приложения по умолчанию недоступны. Они доступны, если работают в Google Compute Engine в. NET C# - PullRequest
1 голос
/ 18 февраля 2020

Прежде всего, область действия этого вопроса: NET C#, поэтому это не дубликат этого ТА вопроса.

У меня есть тестовый код для распознавания речи, который я получить из Google документы. Код следующий:

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 для получения дополнительной информации. '

Что я уже сделал?

Я установил GOOGLE_APPLICATION_CREDENTIALS переменную со значением (закрытый ключ json файл). Я просто запускаю следующую команду в cmd:

set GOOGLE_APPLICATION_CREDENTIALS=C:\Users\myusername\Downloads\my-file-name.json

Кроме того, когда я печатаю переменную среды в cmd, используя echo %GOOGLE_APPLICATION_CREDENTIALS% путь к файлу и отображается имя файла.

Примечание: Я установил среду вручную, но она не сработала.

Что я должен сделать, чтобы решить эту досадную проблему?

Спасибо за ваши предложения и советы.

Редактировать

Следующая строка может установить GOOGLE_APPLICATION_CREDENTIALS переменную среды. Однако, когда приложение завершается / завершается, переменная не может быть достигнута.

System
.Environment
.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"C:\my-path\my-private-key.json");

1 Ответ

0 голосов
/ 28 февраля 2020

Я полагаю, что вы не установили переменную окружения так, чтобы ваша программа могла ее использовать. Обратите внимание:

  • Если вы установите переменную среды с помощью апплета Windows (что, на мой взгляд, является наилучшим подходом), любая существующая командная строка windows победит «увидеть» изменение
  • Если вы установите переменную среды в одном окне командной строки, это не повлияет на другие окна и не будет постоянным
  • Если вы установите среду переменная программно с использованием SetEnvironmentVariable, которая повлияет только на текущий процесс (и любые процессы, которые он порождает)

Если вы не уверены, установлена ​​ли переменная среды, ее легко зарегистрировать, например

var credentialsPath = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");
Console.WriteLine($"Credentials path: {credentialsPath}");

Как только это сработает, я ожидаю, что клиентская библиотека тоже будет в порядке.

...