【问题标题】:No overload for method 'ImageAnnotatorClient.Create' takes 1 arguments方法“ImageAnnotatorClient.Create”没有重载需要 1 个参数
【发布时间】:2021-04-28 21:34:12
【问题描述】:

我正在使用Google.Cloud.Vision.V1, Version=2.0.0.0 以及来自Google Vision API specify JSON file 的以下代码

using Google.Apis.Auth.OAuth2;
using Google.Cloud.Vision.V1;
using Grpc.Auth;
using Grpc.Core;

        var credential = GoogleCredential.FromFile("VisionProject.json");
        var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
        var client = ImageAnnotatorClient.Create(channel);

但它向我显示了这个错误No overload for method 'ImageAnnotatorClient.Create' takes 1 arguments。

我在文档https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Vision.V1P2Beta1/api/Google.Cloud.Vision.V1P2Beta1.ImageAnnotatorClient.html中找到了类似的代码

但由于某种原因,它不起作用(无法看到过载)

【问题讨论】:

  • 您正在查看的 API 版本似乎与您安装的不同。见this
  • 那么我该如何调整api呢?

标签: c# google-cloud-platform google-cloud-vision google-client


【解决方案1】:

您似乎正在使用更新版本的 API。 Docs 表示现在通过环境变量设置了身份验证(在需要时):

否则,验证 API 调用的最简单方法是下载服务帐户 JSON 文件,然后设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量来引用它。凭据将自动用于身份验证。有关详细信息,请参阅Getting Started With Authentication 指南。

所以你可以这样做:

 Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PathTo_VisionProject.json");
 var client = ImageAnnotatorClient.Create();

或以其他方式设置此环境变量。

【讨论】:

    【解决方案2】:

    虽然设置环境变量确实是一种指定要使用哪个服务帐户文件的简单方法,但它并不是唯一的方法。您可以使用构建器非常轻松地指定路径:

    var client = new ImageAnnotatorClientBuilder
    {
        CredentialsPath = "VisionProject.json"
    }.Build();
    

    【讨论】:

    • 看起来好多了。谢谢,乔恩
    • @user960567:很高兴听到这个消息——总体思路是在未来尽可能多地投入到客户端构建器模式中。
    【解决方案3】:

    如果您无法直接访问 JSON 文件并且您希望与之前创建 GoogleCredential 和 Channel 所做的操作保持一致,那么另一种解决方案类似于:

    var credential = GoogleCredential.FromFile("VisionProject.json");
    // or if you have access to the content only
    // var credential = GoogleCredential.FromJson(json);
    var client = await new ImageAnnotatorClientBuilder
    {
        Endpoint = ImageAnnotatorClient.DefaultEndpoint, 
        ChannelCredentials = credential.ToChannelCredentials()
    }.BuildAsync();
    

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多