2016-08-18 4 views
1

После обновления до .NET ядра 1.0 с использованием фреймворки net46 я получаю следующее исключение:MissingMethodException после обновления до .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 является метод расширения от Dapper v1.50.2.0.

Я довольно озадачен этим. Код компилируется просто отлично, но во время выполнения мне говорят, что метода не существует.

Я предполагаю, что это проблема, связанная с несоответствием в версии базовых зависимостей. В Java с использованием Maven или аналогичных инструментов я бы запускал некоторый анализ зависимостей, ища конфликты версий в дереве зависимостей, но я не знаю, как устранить эту проблему в .NET.

Любые предложения о причинах этой проблемы или о том, как я могу устранить эту проблему, будут оценены.

Edit 2016-08-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

Не могли бы вы разместить свой проект.json? – svick

+0

В итоге я переписал вышеприведенный код, избегая при этом QueryMultiple, и теперь он работает. Мне все еще интересно, как устранить конфликты зависимостей в .NET Core. –

+0

В проект добавлен мой project.json. –

ответ

1

Проблема заключается в том, что, что вы ссылки как Dapper и Dapper-Async. Dapper-Async не является дополнением Dapper, это замена. Это означает, что оба пакета содержат Dapper.dll, поэтому dotnet путают, какой из них использовать, и по какой-то причине использует его во время компиляции, а другой во время выполнения, вызывая исключение.

Решение должно использовать либо Dapper, либо Dapper-Async, но не оба. Что касается того, какой из них использовать, я не знаю, так как я не знаком с Даппером. Но я предполагаю, что вы должны использовать Dapper, так как Dapper-Async не был обновлен в течение длительного времени.

+0

О, я бы никогда не догадался. Попробуй сразу. –

+0

Да, кажется, это решило. Я ценю. –

+0

Я думаю, что это несоответствие является ошибкой, поэтому я [сообщил об этом] (https://github.com/dotnet/cli/issues/4131). – svick

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