2

我使用带有 C#(dotnet 核心)的 Google Cloud Stackdriver Trace API 并根据本文工作。

我已经添加了所有需要的代码并想在本地尝试(在我的开发机器上)。由于我不是从 GCP 云运行,因此我创建了一个具有所需权限的新服务帐户。谷歌在文章中说:

GCP 客户端库使用应用程序默认凭据 (ADC) 来查找应用程序的凭据。您可以通过设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量来提供这些凭据:

export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

现在我的代码在达到这一点时失败了:

services.AddGoogleExceptionLogging(options =>
{
    options.ProjectId = Configuration["Stackdriver:ProjectId"];
    options.ServiceName = Configuration["Stackdriver:ServiceName"];
    options.Version = Configuration["Stackdriver:Version"];
});

随着消息:

System.InvalidOperationException:'从位置 C:******.json 读取凭据文件时出错:找不到文件。请检查环境变量 GOOGLE_APPLICATION_CREDENTIALS' 的值

由于许多原因,我不想使用名为GOOGLE_APPLICATION_CREDENTIALS. 相反,我正在寻找一种方法来为其提供实际文件路径,而不使用环境变量。

我该怎么做?

4

2 回答 2

0

由于您不想使用环境变量,您是否尝试过使用 gcloud SDK 进行身份验证?

如此处所述:

如果在本地运行以进行开发/测试,您可以使用 Google Cloud SDK 进行身份验证。如果您还没有下载 SDK,然后在命令行中运行以下命令登录:

gcloud auth 应用程序-默认登录

否则,唯一的另一种方法是在源代码上指定路径。

您应该能够使用此处提供的示例来做到这一点。调整它以满足您的特定需求。

此示例显示如何使用从 JSON 文件加载的凭据创建客户端:

using Google.Cloud.ErrorReporting.V1Beta1;
using Google.Apis.Auth.OAuth2;
using Grpc.Auth;
using Grpc.Core;
...
GoogleCredential cred = GoogleCredential.FromFile("/path/to/credentials.json");
Channel channel = new Channel(
    ReportErrorsServiceClient.DefaultEndpoint.Host, ReportErrorsServiceClient.DefaultEndpoint.Port, cred.ToChannelCredentials());
ReportErrorsServiceClient client = ReportErrorsServiceClient.Create(channel);
...
// Shutdown the channel when it is no longer required.
channel.ShutdownAsync().Wait();
于 2019-09-18T10:17:36.870 回答
-1
于 2019-09-11T10:18:05.163 回答