2016-08-18 8 views
1

를 사용하는 동안 :MissingMethodException이 나는 다음과 같은 예외를 받고 있어요 net46 프레임 워크를 사용하여 .NET 코어 1.0로 업그레이드 한 후 말끔

System.MissingMethodException was unhandled by user code 
HResult=-2146233069 
Message=Method not found: 'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'. 
Source=Sdm.Web 
StackTrace: 
    at Sdm.Web.SqlAccess.SqlMgr.GetNumbersForMainScreen(TenantId tenantId) 
    at Sdm.Web.Test.TestDrivers.SqlMgrTestDriver.TestGetNumbersForMainScreen() in ...\Unittest\SqlMgrTestDriver.cs:line 37 
InnerException: (null) 

그것은 런타임에 발생하는 단지 방법을 입력 시도하기 전에 다음의 코드 라인을 포함 호출 GetNumbersForMainScreen :

 using (SqlMapper.GridReader result = connection.QueryMultiple(SqlGetNumbersForMainScreen, new { recent = recent, tid = tenantId.Id })) 
     { 
      var val = new NumbersForMain() 
      { 
       AlarmsCriticalCount = result.Read<int>().Single(), 
       AlarmsNoncriticalCount = result.Read<int>().Single(), 
       RoomsCount = result.Read<int>().Single(), 
       UnitsOnlineCount = result.Read<int>().Single(), 
       UnitsCount = result.Read<int>().Single(), 
      }; 
      val.UnitsOfflineCount = val.UnitsCount - val.UnitsOnlineCount; 

      return val; 
     } 

여기서 변수 연결 유형 IDbConnection을이며 QueryMultiple은 말끔 v1.50.2.0에서 확장 방법.

나는 이것에 대해 아주 당황 스럽다. 코드는 잘 컴파일되지만 런타임에는 메소드가 존재하지 않는다고 들었습니다.

기본 종속성 버전의 불일치와 관련된 문제라고 생각합니다. Java에서 Maven 또는 유사한 도구를 사용하여 종속성 트리에서 버전 충돌을 찾는 일부 종속성 분석을 실행 하겠지만 .NET에서 이러한 종류의 문제를 해결하는 방법을 알지 못합니다.

이 문제의 원인에 대한 제안이나 이러한 종류의 문제를 해결할 수있는 방법에 대한 의견을 보내 주시면 감사하겠습니다.

편집 2016년 8월 25일는 : 내 project.json은 다음과 같습니다

{ 
     "userSecretsId": "XXX", 
     "buildOptions": { 
     "emitEntryPoint": true, 
     "preserveCompilationContext": true 
     }, 
     "dependencies": { 
     "Dapper": "1.50.2", 
     "Dapper-Async": "1.3.0", 
     "EntityFramework": "6.1.3", 
     "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0", 
     "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.0.0", 
     "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0", 
     "Microsoft.AspNetCore.Diagnostics.Elm": "0.1.0", 
     "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0", 
     "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0", 
     "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
     "Microsoft.AspNetCore.Mvc": "1.0.0", 
     "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0", 
     "Microsoft.AspNetCore.Razor.Tools": { 
      "version": "1.0.0-preview2-final", 
      "type": "build" 
     }, 
     "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
     "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
     "Microsoft.Extensions.Configuration.Json": "1.0.0", 
     "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", 
     "Microsoft.Extensions.Logging": "1.0.0", 
     "Microsoft.Extensions.Logging.Console": "1.0.0", 
     "Microsoft.Extensions.Logging.Debug": "1.0.0", 
     "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 
     "Microsoft.Extensions.Caching.Abstractions": "1.0.0", 
     "Microsoft.Extensions.Caching.Memory": "1.0.0", 
     "Newtonsoft.Json": "9.0.1", 
     "Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0", 
     "Microsoft.AspNetCore.Authorization": "1.0.0", 
     "Microsoft.Azure.Devices": "1.0.5", 
     "Microsoft.AspNetCore.HttpOverrides": "1.0.0", 
     "EFAttributeConfig": "1.0.0", 
     "Twilio": "4.5.0", 
     "Sendgrid": "6.3.4", 
     "Microsoft.AspNetCore.Routing": "1.0.0", 
     "Microsoft.AspNetCore.Hosting": "1.0.0", 
     "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", 
     "log4net": "2.0.5" 
     }, 
     "tools": { 
     "BundlerMinifier.Core": "2.0.238", 
     "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
     "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 
     }, 

     "frameworks": { 
     "net46": { } 
     }, 
     "publishOptions": { 
     "include": [ 
      "wwwroot", 
      "Views", 
      "appsettings.json", 
      "web.config", 
      "log4net.xml" 
     ], 
     "exclude": [ 
      "**.user", 
      "**.vspscc" 
     ]  
     }, 

     "scripts": { 
     "prepublish": [ "bower install", "dotnet bundle" ], 
     "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
     } 
    } 
+0

project.json을 게시 할 수 있습니까? – svick

+0

위 코드를 다시 작성하여 QueryMultiple을 피하고 이제는 작동합니다. .NET Core에서 종속성 충돌 문제를 해결하는 방법은 아직 궁금합니다. –

+0

내 project.json이 질문에 추가되었습니다. –

답변

1

문제는 당신이 DapperDapper-Async 모두를 참조하고있다. Dapper-AsyncDapper의 보완 문자가 아니며 대체입니다. 이것이 의미하는 바는 두 패키지 모두 Dapper.dll을 포함하므로 dotnet은 어떤 패키지를 사용하는지 혼란스럽고 어떤 이유로 컴파일시와 런타임시 하나를 사용하여 예외를 발생시킵니다.

이 솔루션은 Dapper 또는 Dapper-Async하지만 하지 하나 둘을 사용하는 것입니다. Dapper에 익숙하지 않기 때문에 어느 것을 사용해야할지 모르겠습니다. 하지만 내 생각 엔 Dapper-Async은 오랫동안 업데이트되지 않았기 때문에 Dapper을 사용해야합니다.

+0

오, 나는 그것을 결코 짐작하지 않았을 것입니다. 바로 시도해 보겠습니다. –

+0

예, 해결할 것으로 보입니다. 감사합니다. –

+0

이 불일치는 버그라고 생각하므로 [보고했습니다] (https://github.com/dotnet/cli/issues/4131). – svick