【问题标题】:Could not load file or assembly 'Google.Apis, Version=1.27.0.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab' or one of its dependencies.无法加载文件或程序集“Google.Apis,Version=1.27.0.0,Culture=neutral,PublicKeyToken=4b01fa6e34db77ab”或其依赖项之一。
【发布时间】:2017-11-08 17:59:26
【问题描述】:

我需要在我的 Web 应用程序中实现 gmail。在我的网络应用程序中实现 Gmail 时,我遇到了上述异常。

我已经尝试过 Gmail API 快速入门中提到的步骤... https://developers.google.com/gmail/api/quickstart/dotnet

当我尝试创建 GmailService 的对象时,我遇到了一个异常。我的代码如下...

    static UserCredential GetGmailUserCredential()
    {
        UserCredential credential;
        string[] scopes = { GmailService.Scope.GmailReadonly };
        string credPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), ".credentials/gmail-dotnet-quickstart.json");
        try
        {
            using (var stream = new System.IO.FileStream(@"D:\Projects_Temp\Learning\Webform\GSuite\client_secret.json", System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    scopes,
                    Environment.UserName,
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
            }
        }
        catch (Exception ex)
        {
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientID, ClientSecret = clientSecret }
                                                                                         , scopes
                                                                                         , Environment.UserName
                                                                                         , CancellationToken.None
                                                                                         , new FileDataStore(credPath, true)).Result;
        }

        return credential;
    }

    public static GmailService GetGmailClient()
    {
        var credential = GetGmailUserCredential();
        // Create Drive API service.
        var service = new GmailService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential
        });

        return service;
    }

    public static List<Label> GetLabels(GmailService service)
    {
        // Define parameters of request.
        UsersResource.LabelsResource.ListRequest request = service.Users.Labels.List("me");
        // List labels.
        return request.Execute().Labels.ToList();
    }

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            using (GmailService service = GSuiteHelper.GetGmailClient())
            {
                var lst = GSuiteHelper.GetLabels(service);
            }
        }
    }

【问题讨论】:

  • 你安装了 nuget 包吗?你创建了什么类型的项目,你的目标是什么框架?另请注意,如教程中所述,代码是为“简单的 .NET 控制台应用程序”设计的,它不适用于 Web 应用程序。
  • 此示例在控制台应用程序中也不起作用。是的,我已经完成了文章中提到的所有事情。我已经以同样的方式实现了 Google Drive 和 Google Calendar 并且它们正在工作。只有这个功能根本不起作用。

标签: google-api gmail gmail-api google-api-client google-api-dotnet-client


【解决方案1】:

检查您的 Web 应用程序的 Web.config。我看到我的一个重复条目。一个拥有全部大写的公共令牌。所以我猜它是区分大小写的,并且在我升级版本时没有覆盖。所以它一直使用旧版本号,我显然已经卸载了它。 希望这可以帮助。 这些是存在的副本。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Google.Apis.Auth" publicKeyToken="4B01FA6E34DB77AB" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.27.1.0" newVersion="1.27.1.0" />
  </dependentAssembly>

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2019-03-18
    • 2018-03-21
    • 2017-07-02
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多