2014-10-21 2 views
1

Я думаю, что я в аду NuGet Dll.Неожиданная ошибка с использованием библиотек API Google

Моя первая проблема с был происходить:

Не удалось загрузить файл или сборку 'System.Net.Http.Primitives, Version = 1.5.0.0, культура = нейтральной, PublicKeyToken = b03f5f711d50a3a' или один из его зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку.

Но я мог бы решить, что он помещает правую зависимую сборку в файл web.config/app.config.

Теперь у меня есть новая ошибка, что я не делаю ни малейшего представления о том, как решить это

ThreadAbortExceptionSubproceso anulado. - Данные: System.Collections.ListDictionaryInternal - Stack Trace: ru 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 данные) en d: \ Programació \ Nostrum \ BACKEND \ AppLayer \ Control \ Engines \ Database \ Bigquery.cs: línea 175 - Источник : Google.Apis - InnerException: Subproceso anulado. Google.Apis 21/10/2014 17:04:10 ThreadAbortExceptionSubproceso anulado.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.x86.exe' (Managed (v4.0.30319)) : Загружено 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ mscorlib.resources \ v4.0_4.0.0.0_es_b77a5c561934e089 \ mscorlib.resources.dll' 'vstest.executionengine.x86.exe' (управляемый (v4.0.30319))): Загружен 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Threading.Tasks \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Threading.Tasks.dll' 'vstest.executionengine.x86.exe' (Управляемый (v4.0.30319)): Загружен 'D: \ Programació \ Nostrum \ BACKEND \ TestSubmitService \ bin \ Debug \ Microsoft.Threading.Tasks.dll' Первое исключение исключений типа «System.Threading.ThreadAbortException» произошло в mscorlib.dll Первое исключение исключения типа «System.Threading.ThreadAbortException» произошло в Google.Apis.dll Первое исключение случайного типа «Система. Threading.ThreadAbortException 'произошел в Google.Apis.dll ' vstest.executionengine.x86.exe '(управляемый (v4.0.30319)): загружен «C: \ PROGRAM FILES (X86) \ MICROSOFT VISUAL STUDIO 11.0 \ COMMON7 \ IDE \ COMMONEXTENSIONS \ MICROSOFT \ TESTWINDOW \ es \ Microsoft.VisualStudio.TestPlatform.TestExecutor.Core.resources.dll ' ' vstest.executionengine.x86.exe '(Managed (v4.0.30319)): Загружен' C: \ Windows \ Microsoft. Net \ assembly \ GAC_MSIL \ System.Transactions.resources \ v4.0_4.0.0.0_es_b77a5c561934e089 \ System.Transactions.resources.dll ' System.Transactions Критический: 0: http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled Excepción no c ontroladavstest.executionengine.x86.exeSystem.AppDomainUnloadedException, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089Интересное дополнение к un appDomain descargado. System.AppDomainUnloadedException: Intento de obtener acceso un appDomain descargado. Исключение типа «System.Threading.ThreadAbortException» произошло в Google.Apis.dll, но не было обработано в коде пользователя Шаг в: Переход по не-пользовательскому коду «System.Threading.ExecutionContext.RunInternal ' Поток' '(0x77c) вышел с кодом 0 (0x0). Поток '' (0xd44) вышел с кодом 0 (0x0). 'vstest.executionengine.x86.exe' (управляемый (v4.0.30319)): Загружен 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Xaml \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Xaml. dll ', пропущенные символы загрузки. Модуль оптимизирован и включен параметр отладчика «Только мой код». 'vstest.executionengine.x86.exe' (управляемый (v4.0.30319)): Загружен 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.ServiceModel.resources \ v4.0_4.0.0.0_es_b77a5c561934e089 \ System. ServiceModel.resources.dll ' ' vstest.executionengine.x86.exe '(управляемый (v4.0.30319)): Загружен' C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.resources \ v4.0_4.0.0. 0_es_b77a5c561934e089 \ System.resources.dll ' Программа' [4552] vstest.executionengine.x86.exe: Program Trace 'вышла с кодом 0 (0x0). Программа '[4552] vstest.executionengine.x86.exe: Managed (v4.0.30319)' вышла с кодом 0 (0x0).

+0

Избавьтесь от своих блоков 'catch'; они разрушают следы стека. – SLaks

+0

Я обновил сообщение с трассировкой ошибки, которая запускает программу без блока catch – RCalaf

+0

«ThreadAbortException» означает, что код пытался прервать выполняемый поток. У вас есть код, который прерывает потоки? Возможно, что API Google сам прервет поток в случае тайм-аутов, но это маловероятно. Вы используете код внутри модульного теста? –

ответ

2

Ваш код работает внутри модульного теста, о чем свидетельствует vstest.executionengine.x86.exe. Когда тест заканчивается, он пытается прервать любые запущенные потоки, таким образом, ThreadAbortException. Похоже, что код API Google по-прежнему работает в фоновом потоке, который убивается, когда тест заканчивается.

Исправьте тестовый код, чтобы тест не завершился до завершения операции API Google. Не глядя на тестовый код или код, который порождает фоновый поток, можно только догадываться, как его исправить.

Лучший вариант - использовать Задачи вместо необработанных потоков и выставить задачу, чтобы ваш тест мог ждать в Задаче. Другим вариантом является то, что сигнал потока является событием (например, AutoResetEvent), на котором тест будет ждать.

Смежные вопросы