【问题标题】:Google Plus API C# - AccessViolationExceptionGoogle Plus API C# - AccessViolationException
【发布时间】:2014-07-13 14:26:07
【问题描述】:

我正在尝试使用简单的 C# 控制台应用程序访问 Google API 服务(在本例中为 Plus 服务)。每次调用 API 函数时,我都会遇到一个非常奇怪的异常:

“System.AccessViolationException”类型的未处理异常 发生在未知模块中。

附加信息:试图读取或写入受保护的内存。 这通常表明其他内存已损坏。

当我像这个例子一样获取 API 端点时会发生这种情况:

Client.People.Get("me").Execute();

以前有人遇到过这个问题吗?

编辑:

我已经下载了 GPlus 示例,但仍然遇到同样的问题,但现在在里面:

Oauth2Service.TokeninfoRequest request = service.Tokeninfo();

我认为这里的常见情况是关于生成的代码类:

  1. https://code.google.com/p/google-api-dotnet-client/source/browse/20120425-1.1.4497-beta/Generated/Source/Google.Apis.Oauth2.v2.cs?repo=contrib&name=20120503-1.2.4506-beta

  2. https://code.google.com/p/google-api-dotnet-client/source/browse/Current/Generated/Source/Google.Apis.Plus.v1.cs?repo=contrib&r=c757b64c06e143c8b28bda15b4ec7e6a2738d2e5

编辑 2:

我正在附加堆栈跟踪:

在 Google.Apis.Plus.v1.PeopleResource.GetRequest.set_UserId(字符串值) 在 c:\code.google.com\google-api-dotnet-client\default_gen\Tools\Google.Apis.NuGet 中的 Google.Apis.Plus.v1.PeopleResource.GetRequest..ctor(IClientService 服务,字符串 userId)。 Publisher\Template\Build\Google.Apis.Plus.v1.cs:line 2661 在 c:\code.google.com\google-api-dotnet-client\default_gen\Tools\Google.Apis.NuGet.Publisher\Template\Build\ 中的 Google.Apis.Plus.v1.PeopleResource.Get(String userId) Google.Apis.Plus.v1.cs:第 2649 行 在 e:\Copy\Feedly\Backend\Core.External.GooglePlus\GooglePlusApplicationClient.cs:line 34 中的 Core.External.GoogleService.GooglePlusApplicationClient.Test() 在 e:\Projects\Feedly\Backend\Testing\Program.cs:line 88 中的 FeedlyTest.Program.Main(String[] args) 处

编辑 3:

当我使用 Ctrl+F5 组合时,它正在工作。 我读到该组合正在禁用调试器。首先想到,可能在调试器模式下,系统运行在32位(然后无法访问32位边界之外的内存)。 我尝试将调试平台更改为 64 位,但没有帮助。

【问题讨论】:

  • 您使用哪个版本的库?最新版本是核心库的 1.8.2 和 G+ API 的 1.8.1.*。您附加的文件是旧的。
  • 我使用的是 NUGET 的最新版本(1.8.1),只是附加了相关的类(这是我通过谷歌搜索得到的)...... YouTube API 也有同样的问题
  • 您使用的是 Visual Studio 2012 或更高版本吗?
  • 我使用的是 Visual Studio 2013
  • 堆栈跟踪(在编辑 2 中) - 来自不同的调用,请添加正确的调用。您是否以管理员身份运行 VS?您的环境中似乎缺少某些东西......但我们仍然无法弄清楚它是什么。

标签: c# google-api google-plus access-violation


【解决方案1】:

在项目属性 -> 构建 -> 平台目标下: 尝试从“任何 CPU”更改为“x86”,或者尝试打开“首选 32 位”。

【讨论】:

    【解决方案2】:

    您使用的是什么样本? Google+ Quickstart sample 是最新的。此外,您可能会发现 OAuth 2 flows in .NET 上的这篇博文很有用。

    请注意,Google+ 示例目前可以在 Xamarin 和 Visual Studio 中使用,因此您可以尝试使用免费提供的 IDE 来确定它是否是您的环境。

    确保在使用快速入门时您将前往 http://server:port/signin.ashx - 在某些配置中,Web 应用程序将默认使用另一条路线。

    您还可以发布有关您正在使用的代码的更多信息吗?例如,以下代码显示了从上面调用 tokeninfo 的更完整示例:

    Oauth2Service service = new Oauth2Service(
        new Google.Apis.Services.BaseClientService.Initializer());
    Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
    request.AccessToken = token.AccessToken;
    
    Tokeninfo info = request.Execute();
    

    我在 GitHub 上创建了一个非常简单的Google .NET Client API demo,你可以克隆它:

    git clone https://github.com/gguuss/google-dotnet-demo
    

    在 Visual Studio 中打开项目时,还原 NuGet 包,构建项目,然后输入访问令牌。如果一切正常,演示将向您展示一些 TokenInfo 数据。

    我添加了另一个演示授权。执行此操作时,我使用 Visual Studio 2013 进行了测试,并且必须添加以下内容作为安装后步骤...

    copy /Y "$(SolutionDir)packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll" "$(TargetDir)Microsoft.Threading.Tasks.Extensions.Desktop.dll"
    

    ...as described in this Stack Overflow question.

    【讨论】:

    • 我使用了这里的示例:github.com/googleplus/gplus-quickstart-csharp Youtube API 上也存在问题......我确定问题来源不在我的代码中,可能在我的环境中。
    • 添加了更多分辨率选项。
    • 谢谢,但我使用了示例和博客文章中的两个代码。两者都有相同的错误。我用的是VS2013,还有什么可以尝试的?
    • 我创建了一个适合我的简单控制台项目并将其添加到答案中。
    • 我只使用 NuGet 包(在你的例子中我做了 NuGet 恢复)。我的操作系统版本是 Windows 7(内部版本 7601:Service Pack 1),我的 VS 版本是 12.0.21005.1 如果需要,可以在环聊私下联系我,并使用远程桌面服务查看此问题。
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2016-12-07
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多