MissingMethodException después de la actualización a .net core 1.0 mientras usa Dapper

.net .net-core dapper jit

Pregunta

Después de actualizar a .NET core 1.0 utilizando el framework net46 recibo la siguiente excepción:

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)

Sucede en el tiempo de ejecución justo antes de tratar de ingresar el método llamado GetNumbersForMainScreen, que contiene las siguientes líneas de código:

     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;
        }

Aquí la conexión variable es de tipo IDbConnection y QueryMultiple es un método de extensión de Dapper v1.50.2.0.

Estoy bastante desconcertado acerca de esto. El código compila muy bien, pero en tiempo de ejecución me dijeron que el método no existe.

Supongo que es un problema relacionado con la falta de coincidencia en la versión de las dependencias subyacentes. En Java usando Maven o herramientas similares, ejecutaba algunos análisis de dependencia buscando conflictos de versiones en el árbol de dependencias, pero no sé cómo solucionar este tipo de problema en .NET.

Cualquier sugerencia sobre qué causa este problema o cómo puedo solucionar este tipo de problema será apreciada.

Editar 2016-08-25: Mi proyecto.json se ve así:

    {
      "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%" ]
      }
    }

Respuesta aceptada

El problema es que estás haciendo referencia tanto a Dapper como a Dapper-Async . Dapper-Async no es un complemento de Dapper , es un reemplazo . Lo que esto significa es que ambos paquetes contienen Dapper.dll , por lo que dotnet se confunde sobre cuál usar, y por alguna razón, usa uno en tiempo de compilación y el otro en tiempo de ejecución, lo que causa la excepción.

La solución es usar Dapper o Dapper-Async , pero no ambos . En cuanto a cuál usar, no sé, ya que no estoy familiarizado con Dapper. Pero supongo que deberías usar Dapper , ya que Dapper-Async no se ha actualizado en mucho tiempo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué