使用Google API库时出现意外错误

本文关键字:意外 错误 Google API 使用 | 更新日期: 2023-09-27 18:27:16

我觉得我在NuGet-Dll地狱里。

我的第一个问题是:

无法加载文件或程序集"System.Net.Http.Primitives,Version=1.5.0.0,Culture=neutral,PublicKeyToken=b03f5f711d50a3a"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。

但我可以通过在web.config/app.config中放置正确的dependentAssembly来解决这个问题。

现在,我有一个新的错误,我不知道如何解决它

线程异常子进程。-数据:System.Collections.ListDictionaryInternal-堆栈跟踪:en Google.Apis.Requests.ClientServiceRequest 1.Execute() en c:'code'google.com'google-api-dotnet-client'default'Tools'Google.Apis.Release'bin'Debug'test'default'Src'GoogleApis'Apis'Requests'ClientServiceRequest.cs:línea 100 en AppLayer.Control.Engines.Database.Bigquery.InsertAll(BigqueryService s, String datasetId, String tableId, List 1 Data)en d:''Programació''Nostrum''BACKEND''AppLayer''Control''Engines''Database''Bigquery.cs:línea 175-来源:Google.Apis-InnerException:Subproceso anulado。谷歌。Apis 2014年10月21日17:04:10威胁堕胎例外子程序。System.Collections.ListDictionaryInternal System.Collections.Generic.List`1[Google.Apis.Bigquery.v2.Data.TableDataInsertAllRequest+RowsData]

我使用的是Visual Studio 2012 Update 4,这是我的代码

public bool InsertAll(BigqueryService s, String datasetId, String tableId, List<TableDataInsertAllRequest.RowsData> data)
    {
        try
        {
            TabledataResource t = s.Tabledata;
            TableDataInsertAllRequest req = new TableDataInsertAllRequest()
            {
                Kind = "bigquery#tableDataInsertAllRequest",
                Rows = data 
            };
            //My code crashes in the next line 
            TableDataInsertAllResponse response = t.InsertAll(req, projectId, datasetId, tableId).Execute();
            if (response.InsertErrors != null)
            {
                return true;
            }
        }
        catch (ThreadAbortException e)
        {
            throw e;
        }
        catch (Exception e)
        {
            throw e;
        }
            return false;
    }

有人知道怎么解决这个问题吗?我很沮丧。。。

如果我删除捕获块,我会在输出窗口中得到它

"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''mscorlib.resources''v4.0_4.0.0.0_es_b77a5c561934e089''mscorlb.resources.dll"vstest.executionengine.x6.exe"(托管(v4.0.30319)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.Threading.Tasks''v4.0.0.0__b03f5f7f11d50a3a''System.Thrading.TTasks.dll"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"D:''Programació''Nostrum''BACKEND''TestSubmitService''bin''Debug''Microsoft.Threading.Tasks.dll"mscorlib.dll中出现"System.Threading.ThreadAbortException"类型的首次机会异常Google.Apis.dll中首次出现"System.Threading.ThreadAbortException"类型的异常Google.Apis.dll中首次出现"System.Threading.ThreadAbortException"类型的异常"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''PROGRAM FILES(x86)''MicrosoftOFT VISUAL STUDIO 11.0''COMON7''IDE''COMONEXTENSIONs''MICROSOFT''TESTWINDOW''es''MICROSOFT.VisualStudio.TestPlatform.TestExecutior.Core.resources.dll"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.Transactions.resources''v4.0_4.0.0.0_es_b77a5c561934e089''System.Ttransactions.resources.dll"系统事务关键:0:http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/UnhandledExcepción no controladavstest.executionengine.x86.exeSystem.AppDomainUnloadedException,mscorlib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089意图获得一个un-AppDomain descargado。System.AppDomainUnloadedException:意图取消获取者访问un-AppDomain descargado。Google.Apis.dll中出现类型为"System.Threading.ThreadAbortException"的异常,但未在用户代码中进行处理单步执行:跨接非用户代码"System.Threading.ExecutionContext.RunInternal"线程"(0x77c)已退出,代码为0(0x0)。线程"(0xd44)已退出,代码为0(0x0)。"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.Xaml''v4.0.0.0__b77a5c561934e089''System.Xamil.dll",已跳过加载符号。模块已优化,调试器选项"仅我的代码"已启用。"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.ServiceModel.resources''v4.0.4.0_es_b77a5c561934e089''System.ServicesModel.resources.dll"vstest.executionengine.x6.exe"(托管(v4.0.30119)):已加载"C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.resources''v4.0.4.0_es_b77a5c561934e089''System.reresources.dll"程序"[4552]vstest.executionengine.x86.exe:程序跟踪"已退出,代码为0(0x0)。程序"[4552]vstest.executionengine.x86.exe:Managed(v4.0.30319)"已退出,代码为0(0x0)。

使用Google API库时出现意外错误

您的代码在单元测试中运行,vstest.executionengine.x86.exe就是明证。当测试完成时,它会尝试中止任何正在运行的线程,从而中止ThreadAbortException。Google API代码似乎仍在后台线程上运行,当测试结束时,后台线程会被杀死。

修复你的测试代码,这样测试就不会在Google API操作完成之前完成。不看测试代码,或者产生后台线程的代码,人们只能猜测如何修复它

最好的选择是使用Tasks而不是原始线程并公开任务,这样您的测试就可以等待task了。另一种选择是让线程发出一个事件信号(例如AutoResetEvent),测试将在该事件上等待。