2014-10-21 6 views
1

나는 NuGet Dll hell에 있다고 생각합니다.Google API 라이브러리를 사용하는 중에 예기치 않은 오류가 발생했습니다.

나의 첫 번째 문제로 발생했습니다있다 :

파일이나 어셈블리를로드 할 수 없습니다 'System.Net.Http.Primitives, 버전 = 1.5.0.0을, 문화 = 중립, PublicKeyToken은 = b03f5f711d50a3a'또는 하나의 의존성. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.

그러나 저는 depend.Assembly를 web.config/app.config에 넣는 방법으로 해결할 수 있습니다.

지금, 나는 그것이

ThreadAbortExceptionSubproceso의 anulado 해결하는 방법에 대한 어떤 생각을하지 않는 새로운 오류가 있습니다. - 데이터 : System.Collections.ListDictionaryInternal - 스택 추적 : ko 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 개) \ Programaci \ Nostrum \ BACKEND \ AppLayer \ Control \ Engines \ Database \ Bigquery.cs : línea 175 - 소스 : Google.Apis - InnerException : 하위 프로 시저입니다. Google.Apis 21/10/2014 17시 4분 10초 ThreadAbortExceptionSubproceso anulado.System.Collections.ListDictionaryInternal System.Collections.Generic.List`1 [Google.Apis.Bigquery.v2.Data.TableDataInsertAllRequest RowsData +]

이 문제를 해결하는 방법에 대한 어떤 생각을 가지고 나는 업데이트 4 비주얼 스튜디오 2012을 사용하고 있는데, 이것은 내 코드

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'(관리 (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'(Managed (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' (Managed (v4.0.30319)) :로드 된 'D : \ Programació \ Nostrum \ BACKEND \ TestSubmitService \ bin \ Debug \ Microsoft.Threading.Tasks.dll' mscorlib.dll에서 'System.Threading.ThreadAbortException'유형의 첫 번째 예외가 발생했습니다. 'System.Threading.ThreadAbortException'유형의 첫 번째 예외가 Google.Apis.dll에서 발생했습니다. 'System'유형의 첫 번째 예외입니다. Threading.ThreadAbortException '이 발생했습니다. Google.Apis.dll 'vstest.executionengine.x86.exe '(Managed (v4.0.30319)) :'C : \ PROGRAM 파일 (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, 버전 = 4.0.0.0, 문화 = 중립, PublicKeyToken = b77a5c561934e089 응용 프로그램 도메인에 대한 설명을 보려면을 클릭하십시오. System.AppDomainUnloadedException : AppDomain 설명에 동의 함을 나타냅니다. 'System.Threading.ThreadAbortException'유형의 예외가 Google.Apis.dll에서 발생했지만 사용자 코드 에서 처리되지 않았습니다. 비인가 코드 'System.Threading.ExecutionContext.RunInternal ' 스레드' '(0x77c)이 코드 0 (0x0)으로 종료되었습니다. 스레드 ''(0xd44)가 코드 0 (0x0)으로 종료되었습니다. 'vstest.executionengine.x86.exe'(Managed (v4.0.30319)) : 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Xaml \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Xaml. dll ', 로딩 기호 건너 뜀. 모듈이 최적화되고 디버거 옵션 'Just My Code'가 활성화됩니다. 'vstest.executionengine.x86.exe'(Managed (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 '(Managed (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'은 실행중인 스레드를 중단하려고 시도한 코드를 의미합니다. 스레드를 중단시키는 코드가 있습니까? 타임 아웃이 발생하면 Google API 자체가 스레드를 중단하지만 가능성은 적을 수 있습니다. 단위 테스트 내에서 코드를 실행하고 있습니까? –

답변

2

코드는 vstest.executionengine.x86.exe에 의해 입증되는 단위 테스트 내에서 실행됩니다. 테스트가 끝나면 실행중인 스레드를 중단하려고 시도하므로 ThreadAbortException입니다. Google API 코드가 테스트가 끝날 때 죽게되는 백그라운드 스레드에서 계속 실행되고있는 것으로 보입니다.

Google API 작업이 완료되기 전에 테스트가 완료되지 않도록 테스트 코드를 수정하십시오. 테스트 코드 나 백그라운드 스레드를 생성하는 코드를 보지 않고도이를 수정하는 방법 만 추측 할 수 있습니다.

가장 좋은 방법은 원시 스레드 대신 작업을 사용하고 테스트를 기다릴 수 있도록 작업을 노출하는 것입니다. 또 다른 옵션은 스레드가 테스트가 대기하는 이벤트 (예 : AutoResetEvent)를 신호로 보내는 것입니다.